Sat Jun 15 18:13:43 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
[kopensolaris-gnu/glibc.git] / libc-symbols.h
index f211f48..aaf9f2a 100644 (file)
@@ -27,14 +27,13 @@ Cambridge, MA 02139, USA.  */
    We include config.h which is generated by configure.
    It should define for us the following symbols:
 
    We include config.h which is generated by configure.
    It should define for us the following symbols:
 
+   * HAVE_ASM_SET_DIRECTIVE if we have `.set B, A' instead of `A = B'.
+   * ASM_GLOBAL_DIRECTIVE with `.globl' or `.global'.
    * HAVE_GNU_LD if using GNU ld, with support for weak symbols in a.out,
    and for symbol set and warning messages extensions in a.out and ELF.
    * HAVE_GNU_LD if using GNU ld, with support for weak symbols in a.out,
    and for symbol set and warning messages extensions in a.out and ELF.
-   This implies HAVE_WEAK_SYMBOLS; set by --with-gnu-ld.
-   * HAVE_ELF if using ELF, which supports weak symbols.
-   This implies HAVE_WEAK_SYMBOLS; set by --with-elf.
-
-   * HAVE_WEAK_SYMBOLS if weak symbols are available in the assembler and
-   linker being used.  Set by --with-weak-symbols.
+   * HAVE_ELF if using ELF, which supports weak symbols using `.weak'.
+   * HAVE_ASM_WEAK_DIRECTIVE if we have weak symbols using `.weak'.
+   * HAVE_ASM_WEAKEXT_DIRECTIVE if we have weak symbols using `.weakext'.
 
    */
 
 
    */
 
@@ -47,6 +46,9 @@ Cambridge, MA 02139, USA.  */
    itself is being compiled, or just some generator program.  */
 #define _LIBC  1
 
    itself is being compiled, or just some generator program.  */
 #define _LIBC  1
 
+/* Enable declarations of GNU extensions, since we are compiling them.  */
+#define _GNU_SOURCE    1
+
 #include <config.h>
 /*
 \f
 #include <config.h>
 /*
 \f
@@ -76,23 +78,14 @@ extern const char _libc_intl_domainname[];
 /*
 \f
 */
 /*
 \f
 */
-/* The symbols in all the user (non-_) macros are C symbols.  Predefined
-   should be HAVE_WEAK_SYMBOLS and/or HAVE_ELF and/or HAVE_GNU_LD.
-   HAVE_WEAK_SYMBOLS is implied by the other two.  HAVE_GNU_LD without
-   HAVE_ELF implies a.out.  */
+/* The symbols in all the user (non-_) macros are C symbols.
+   HAVE_GNU_LD without HAVE_ELF implies a.out.  */
 
 
-#ifndef HAVE_WEAK_SYMBOLS
-#if defined (HAVE_ELF) || defined (HAVE_GNU_LD)
+#if defined (HAVE_ASM_WEAK_DIRECTIVE) || defined (HAVE_ASM_WEAKEXT_DIRECTIVE)
 #define HAVE_WEAK_SYMBOLS
 #endif
 #define HAVE_WEAK_SYMBOLS
 #endif
-#endif
 
 #ifndef __SYMBOL_PREFIX
 
 #ifndef __SYMBOL_PREFIX
-#ifdef HAVE_ELF
-#define NO_UNDERSCORES
-#else
-#include <sysdep.h>            /* Should define NO_UNDERSCORES.  */
-#endif
 #ifdef NO_UNDERSCORES
 #define __SYMBOL_PREFIX
 #else
 #ifdef NO_UNDERSCORES
 #define __SYMBOL_PREFIX
 #else
@@ -140,8 +133,21 @@ extern const char _libc_intl_domainname[];
 
 
 #ifdef HAVE_WEAK_SYMBOLS
 
 
 #ifdef HAVE_WEAK_SYMBOLS
+
 #ifdef ASSEMBLER
 
 #ifdef ASSEMBLER
 
+#ifdef HAVE_ASM_WEAKEXT_DIRECTIVE
+
+/* Define ALIAS as a weak alias for ORIGINAL.
+   If weak aliases are not available, this defines a strong alias.  */
+#define weak_alias(original, alias)    \
+  .weakext C_SYMBOL_NAME (alias), C_SYMBOL_NAME (original)
+
+/* Declare SYMBOL to be weak.  */
+#define weak_symbol(symbol)    .weakext C_SYMBOL_NAME (symbol)
+
+#else /* ! HAVE_ASM_WEAKEXT_DIRECTIVE */
+
 /* Define ALIAS as a weak alias for ORIGINAL.
    If weak aliases are not available, this defines a strong alias.  */
 #define weak_alias(original, alias)    \
 /* Define ALIAS as a weak alias for ORIGINAL.
    If weak aliases are not available, this defines a strong alias.  */
 #define weak_alias(original, alias)    \
@@ -151,12 +157,21 @@ extern const char _libc_intl_domainname[];
 /* Declare SYMBOL to be weak.  */
 #define weak_symbol(symbol)    .weak C_SYMBOL_NAME (symbol)
 
 /* Declare SYMBOL to be weak.  */
 #define weak_symbol(symbol)    .weak C_SYMBOL_NAME (symbol)
 
-#else
+#endif /* ! HAVE_ASM_WEAKEXT_DIRECTIVE */
+
+#else /* ! ASSEMBLER */
+
+#ifdef HAVE_ASM_WEAKEXT_DIRECTIVE
+#define weak_symbol(symbol)    asm (".weakext " __SYMBOL_PREFIX #symbol);
+#define weak_alias(original, alias) \
+  asm (".weakext " __SYMBOL_PREFIX #alias ", " __SYMBOL_PREFIX #original);
+#else /* ! HAVE_ASM_WEAKEXT_DIRECTIVE */
 #define weak_symbol(symbol)    asm (".weak " __SYMBOL_PREFIX #symbol);
 #define weak_alias(original, alias) \
   asm (".weak " __SYMBOL_PREFIX #alias "\n" \
        __SYMBOL_PREFIX #alias " = " __SYMBOL_PREFIX #original);
 #define weak_symbol(symbol)    asm (".weak " __SYMBOL_PREFIX #symbol);
 #define weak_alias(original, alias) \
   asm (".weak " __SYMBOL_PREFIX #alias "\n" \
        __SYMBOL_PREFIX #alias " = " __SYMBOL_PREFIX #original);
-#endif
+#endif /* ! HAVE_ASM_WEAKEXT_DIRECTIVE */
+#endif /* ! ASSEMBLER */
 #else
 #define        weak_alias(original, alias) strong_alias(original, alias)
 #define weak_symbol(symbol)    /* Do nothing.  */
 #else
 #define        weak_alias(original, alias) strong_alias(original, alias)
 #define weak_symbol(symbol)    /* Do nothing.  */