diff options
author | Eric Andersen <andersen@codepoet.org> | 2002-02-18 08:34:59 +0000 |
---|---|---|
committer | Eric Andersen <andersen@codepoet.org> | 2002-02-18 08:34:59 +0000 |
commit | 5305b3df0ac3b6970947180fa9b2fcad0b6e6364 (patch) | |
tree | 4d4e390fd0f8b77e73e3e96542956df47582b3b5 /include | |
parent | dc3cbf11415312c6a28dc8c652ee2bec7e6a6f8e (diff) |
Support strong_alias and begin merging usage of weak_function
Diffstat (limited to 'include')
-rw-r--r-- | include/features.h | 29 |
1 files changed, 16 insertions, 13 deletions
diff --git a/include/features.h b/include/features.h index 22795e0b3..562dca91f 100644 --- a/include/features.h +++ b/include/features.h @@ -333,28 +333,31 @@ /* Some nice features only work properly with ELF */ #if defined _LIBC && defined HAVE_ELF +/* Define ALIASNAME as a weak alias for NAME. */ # define weak_alias(name, aliasname) _weak_alias (name, aliasname) +# define _weak_alias(name, aliasname) \ + extern __typeof (name) aliasname __attribute__ ((weak, alias (#name))); +/* Define ALIASNAME as a strong alias for NAME. */ +# define strong_alias(name, aliasname) _strong_alias(name, aliasname) +# define _strong_alias(name, aliasname) \ + extern __typeof (name) aliasname __attribute__ ((alias (#name))); +/* This comes between the return type and function name in + * a function definition to make that definition weak. */ +# define weak_function __attribute__ ((weak)) +/* Tacking on "\n\t#" to the section name makes gcc put it's bogus + * section attributes on what looks like a comment to the assembler. */ # define link_warning(symbol, msg) \ asm (".section " ".gnu.warning." #symbol "\n\t.previous"); \ static const char __evoke_link_warning_##symbol[] \ __attribute__ ((section (".gnu.warning." #symbol "\n\t#"))) = msg; -# define _weak_alias(name, aliasname) \ - extern __typeof (name) aliasname __attribute__ ((weak, alias (#name))); -/* -# define _weak_alias(name, aliasname) \ - asm(".global " C_SYMBOL_PREFIX #name ";" \ - ".weak " C_SYMBOL_PREFIX #aliasname ";" \ - C_SYMBOL_PREFIX #aliasname "=" C_SYMBOL_PREFIX #name ";"); -*/ -# define weak_symbol(name) \ - asm(".weak " C_SYMBOL_PREFIX #name ";"); #else -# define weak_alias(name, aliasname) _weak_alias (name, aliasname) +# define strong_alias(name, aliasname) _strong_alias (name, aliasname) +# define weak_alias(name, aliasname) _strong_alias (name, aliasname) +# define _strong_alias(name, aliasname) \ + __asm__(".global _" #aliasname "\n.set _" #aliasname ",_" #name); # define link_warning(symbol, msg) \ asm (".stabs \"" msg "\",30,0,0,0\n\t" \ ".stabs \"" #symbol "\",1,0,0,0\n"); -# define _weak_alias(name, aliasname) \ - __asm__(".global _" #aliasname "\n.set _" #aliasname ",_" #name); #endif /* --- this is added to integrate linuxthreads */ |