Browse Source

grab some macros for internal ldso usage and fix strong_alias/hidden_strong_alias when .set support is disabled

Mike Frysinger 20 years ago
parent
commit
1ad608ee16
1 changed files with 26 additions and 1 deletions
  1. 26 1
      include/libc-symbols.h

+ 26 - 1
include/libc-symbols.h

@@ -273,6 +273,31 @@
   link_warning (name, \
   link_warning (name, \
 		"warning: " #name " is not implemented and will always fail")
 		"warning: " #name " is not implemented and will always fail")
 
 
+/* Handling on non-exported internal names.  We have to do this only
+   for shared code.  */
+#ifdef SHARED
+# define INTUSE(name) name##_internal
+# define INTDEF(name) strong_alias (name, name##_internal)
+# define INTVARDEF(name) \
+  _INTVARDEF (name, name##_internal)
+# if defined HAVE_VISIBILITY_ATTRIBUTE
+#  define _INTVARDEF(name, aliasname) \
+  extern __typeof (name) aliasname __attribute__ ((alias (#name), \
+						   visibility ("hidden")));
+# else
+#  define _INTVARDEF(name, aliasname) \
+  extern __typeof (name) aliasname __attribute__ ((alias (#name)));
+# endif
+# define INTDEF2(name, newname) strong_alias (name, newname##_internal)
+# define INTVARDEF2(name, newname) _INTVARDEF (name, newname##_internal)
+#else
+# define INTUSE(name) name
+# define INTDEF(name)
+# define INTVARDEF(name)
+# define INTDEF2(name, newname)
+# define INTVARDEF2(name, newname)
+#endif
+
 /* The following macros are used for PLT bypassing within libc.so
 /* The following macros are used for PLT bypassing within libc.so
    (and if needed other libraries similarly).
    (and if needed other libraries similarly).
    First of all, you need to have the function prototyped somewhere,
    First of all, you need to have the function prototyped somewhere,
@@ -416,7 +441,7 @@
   .hidden C_SYMBOL_DOT_NAME (alias) ASM_LINE_SEP			\
   .hidden C_SYMBOL_DOT_NAME (alias) ASM_LINE_SEP			\
   C_SYMBOL_DOT_NAME (alias) = C_SYMBOL_DOT_NAME (original)
   C_SYMBOL_DOT_NAME (alias) = C_SYMBOL_DOT_NAME (original)
 #  else
 #  else
-#   define strong_alias(original, alias)				\
+#   define hidden_strong_alias(original, alias)				\
   ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME (alias) ASM_LINE_SEP		\
   ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME (alias) ASM_LINE_SEP		\
   .hidden C_SYMBOL_NAME (alias) ASM_LINE_SEP				\
   .hidden C_SYMBOL_NAME (alias) ASM_LINE_SEP				\
   C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original)
   C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original)