| Fix build on platforms where __USER_LABEL_PREFIX__ is not empty |
| |
| On most platforms, a C language symbol and its assembly equivalent are |
| identical. However, on the Blackfin architecture, this isn't the case, |
| the corresponding C language symbol in assembly is prepended with a |
| "_". Blackfin therefore has __USER_LABEL_PREFIX__ defined to "_". |
| |
| Cairo already has some code to cope with __USER_LABEL_PREFIX__, but |
| this code isn't completely correct: it prepends both assembly symbols |
| and C symbols with __USER_LABEL_PREFIX__, which cannot work. |
| |
| This patch fixes that by using the existing slim_hidden_asmname() to |
| define assembly symbols, and introduce a new slim_hidden_realname() |
| for C symbols. |
| |
| Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> |
| |
| Index: b/src/cairo-compiler-private.h |
| =================================================================== |
| --- a/src/cairo-compiler-private.h |
| +++ b/src/cairo-compiler-private.h |
| @@ -93,12 +93,13 @@ |
| __asm__ (slim_hidden_asmname (internal)) |
| # define slim_hidden_def1(name, internal) \ |
| extern __typeof (name) EXT_##name __asm__(slim_hidden_asmname(name)) \ |
| - __attribute__((__alias__(slim_hidden_asmname(internal)))) |
| + __attribute__((__alias__(slim_hidden_realname(internal)))) |
| # define slim_hidden_ulp slim_hidden_ulp1(__USER_LABEL_PREFIX__) |
| # define slim_hidden_ulp1(x) slim_hidden_ulp2(x) |
| # define slim_hidden_ulp2(x) #x |
| # define slim_hidden_asmname(name) slim_hidden_asmname1(name) |
| # define slim_hidden_asmname1(name) slim_hidden_ulp #name |
| +# define slim_hidden_realname(name) #name |
| #else |
| # define slim_hidden_proto(name) int _cairo_dummy_prototype(void) |
| # define slim_hidden_proto_no_warn(name) int _cairo_dummy_prototype(void) |
| Index: b/util/cairo-script/cairo-script-private.h |
| =================================================================== |
| --- a/util/cairo-script/cairo-script-private.h |
| +++ b/util/cairo-script/cairo-script-private.h |
| @@ -109,12 +109,13 @@ |
| __asm__ (slim_hidden_asmname (internal)) |
| # define slim_hidden_def1(name, internal) \ |
| extern __typeof (name) EXT_##name __asm__(slim_hidden_asmname(name)) \ |
| - __attribute__((__alias__(slim_hidden_asmname(internal)))) |
| + __attribute__((__alias__(slim_hidden_realname(internal)))) |
| # define slim_hidden_ulp slim_hidden_ulp1(__USER_LABEL_PREFIX__) |
| # define slim_hidden_ulp1(x) slim_hidden_ulp2(x) |
| # define slim_hidden_ulp2(x) #x |
| # define slim_hidden_asmname(name) slim_hidden_asmname1(name) |
| # define slim_hidden_asmname1(name) slim_hidden_ulp #name |
| +# define slim_hidden_realname(name) #name |
| #else |
| # define slim_hidden_proto(name) int _csi_dummy_prototype(void) |
| # define slim_hidden_proto_no_warn(name) int _csi_dummy_prototype(void) |