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 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)