add support for hosts that have custom symbol prefixes

From: Mike Frysinger <vapier@gentoo.org>

some architectures, like Blackfin, have a prefix added to all symbols (in our
case it's historical baggage)

while normally packages shouldnt care, when code starts mixing assembler with
C (like symbol versioning), you need to dip down into the inner details.
find attached a patch which queries gcc for the prefix (all gcc toolchains
have a builtin define of __USER_LABEL_PREFIX__) and then automatically has
asm() constructs utilize this

since most targets define __USER_LABEL_PREFIX__ to nothing, hopefully this
shouldnt cause any problems :)
This commit is contained in:
Takashi Iwai 2006-09-19 18:07:51 +02:00
parent 0211bc3b68
commit f0fbd4c03e
3 changed files with 33 additions and 19 deletions

View file

@ -192,6 +192,9 @@ extern snd_lib_error_handler_t snd_err_msg;
/* When a reference to SYMBOL is encountered, the linker will emit a
warning message MSG. */
#define ASM_NAME(name) __SYMBOL_PREFIX name
#ifdef HAVE_GNU_LD
# ifdef HAVE_ELF
@ -210,19 +213,19 @@ extern snd_lib_error_handler_t snd_err_msg;
section attributes on what looks like a comment to the assembler. */
# ifdef HAVE_SECTION_QUOTES
# define link_warning(symbol, msg) \
__make_section_unallocated (".gnu.warning." #symbol) \
__make_section_unallocated (".gnu.warning." ASM_NAME(#symbol)) \
static const char __evoke_link_warning_##symbol[] \
__attribute__ ((section (".gnu.warning." #symbol "\"\n\t#\""))) = msg;
__attribute__ ((section (".gnu.warning." ASM_NAME(#symbol) "\"\n\t#\""))) = msg;
# else
# define link_warning(symbol, msg) \
__make_section_unallocated (".gnu.warning." #symbol) \
__make_section_unallocated (".gnu.warning." ASM_NAME(#symbol)) \
static const char __evoke_link_warning_##symbol[] \
__attribute__ ((section (".gnu.warning." #symbol "\n\t#"))) = msg;
__attribute__ ((section (".gnu.warning." ASM_NAME(#symbol) "\n\t#"))) = msg;
# endif
# else
# define link_warning(symbol, msg) \
asm (".stabs \"" msg "\",30,0,0,0\n\t" \
".stabs \"" __SYMBOL_PREFIX #symbol "\",1,0,0,0\n");
".stabs \"" ASM_NAME(#symbol) "\",1,0,0,0\n");
# endif
#else
/* We will never be heard; they will all die horribly. */