buildrootschalter/package/cairo/cairo-001-blackfin-build-fix.patch
Thomas Petazzoni 848c5b9480 cairo: improve the Blackfin build fix
Patch cairo-001-blackfin-build-fix.patch was added in commit
d372d0b677 ('cairo: add patch to fix
Blackfin build failure') to take into account the fact that Blackfin
has a non-empty USER_LABEL_PREFIX: C symbol 'foo' corresponds to
assembly symbol '_foo', contrary to most other architectures where
they are the same.

However, the patch was only fixing the relevant macros in
src/cairo-compiler-private.h and did not take into account the
duplicated version of these macros in
util/cairo-script/cairo-script-private.h. This commit fixes that.

This commit is fixing a build failure on Blackfin, for which there was
no recorded autobuilder result because this problem was hidden by the
problem fixed by the previous commit ('cairo: fix build on Blackfin in
test/cairo-test-runner.c').

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2014-02-24 08:58:23 +01:00

56 lines
2.6 KiB
Diff

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)