This is the mail archive of the libc-alpha@sources.redhat.com mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] ppc64 libc-symbols patch


Same as before but made the definition of HIDDEN_JUMPTARGET conditional
on HAVE_ASM_GLOBAL_DOT_NAME. An better Changelog description.

For powerpc64 the alias macros, which generate inline asm directives, need to
explicitly alias both the base (function descriptor) and "dotted" 
(branch target) symbols.  All of these changes are conditioned on the 
HAVE_ASM_GLOBAL_DOT_NAME symbol from config.h.

This impacted the definitions of the following macros: C_SYMBOL_DOT_NAME, 
_weak_extern, _strong_alias, _weak_alias, and _symbol_version.

However the introduction of the various hidden_proto/hidden_def macros adds 
another dimension to this issue. See the following for details:

http://sources.redhat.com/ml/libc-alpha/2002-08/msg00079.html
http://sources.redhat.com/ml/libc-alpha/2002-08/msg00166.html
http://sources.redhat.com/ml/libc-alpha/2002-08/msg00185.html

The issue is that the powerpc64 ABI requires "DOT_NAMEs" for functions but not
for static data. While most of these macros reference functions, here is at 
least one case (./inet/in6_addr.c) where libc_hidden_proto/libc_hidden_def is 
used to alias a static variable.

A single macro can't know (at cpp time) if the symbol is a function (which
requires the extra DOT_NAMEs) or is static variable (which does need the
extra DOT_NAMEs)? The macro processor does not know the intended type 
(function or data) of the symbol. But the generated assembler must have DOTed 
(the actual function entry) and nonDOTed (the function descriptor or odp 
entry) names defined.

The following patch takes the approach of defining separates macros 
(hidden_data_def, hidden_data_weak, hidden_data_ver) for defining hidden 
static data variables and leaving the initially defined (hidden_def, 
hidden_weak, hidden_ver) macros for hidden functions. The hidden_data_* 
macros are used to define the libc_hidden_data_*, rtld_hidden_data_* and 
libm_hidden_data_* macros to complete the set.  Added a strong_data_alias
macro to complete the set for static data.

To simplify the logic I introduced auxiliary macros hidden_dot_def1 and 
hidden_dot_weak1 for use in the definitions of hidden_def, hidden_weak, and
hidden_ver macros. If HAVE_ASM_GLOBAL_DOT_NAME is defined, these macros 
generate asm statements to define the DOT_NAMES. Otherwise (for most 
platforms) these macros are empty definitions and no additional statements 
are generated.

There was some discussion about getting better compiler support via 
__attribute__ that might eliminate the asm (and special DOT_NAME handling)
from libc_symbols.h. However I have seen no real movement on this topic and
I doubt that it possible to get all the required gcc support lined up in time
for glibc-2.3.

2002-09-16  Steven Munroe  <sjmunroe@us.ibm.com>

	* include/libc-symbols.h [HAVE_ASM_GLOBAL_DOT_NAME]
	(C_SYMBOL_DOT_NAME): Insure that C_SYMBOL_DOT_NAME works for 
	various gcc versions.  Dot names required for powerpc64.
	[HAVE_ASM_GLOBAL_DOT_NAME] (_weak_extern): Add .weakext '.'ed symbol.
	[HAVE_ASM_GLOBAL_DOT_NAME] (strong_alias): Add .global 
	C_SYMBOL_DOT_NAME(alias).
	[HAVE_ASM_GLOBAL_DOT_NAME] (strong_data_alias): New macro. Same as 
	original strong_alias macro.
	[HAVE_ASM_GLOBAL_DOT_NAME] (weak_alias): Add .weakext/.weak 
	C_SYMBOL_DOT_NAME(alias).
	[HAVE_ASM_GLOBAL_DOT_NAME] (_symbol_version): Add .symver '.'ed name.
	[HAVE_ASM_GLOBAL_DOT_NAME] (_default_symbol_version): Add .symver 
	'.'ed name.
	Add comments on libc_hidden_data_def and libc_hidden_data_weak usage.
	[HAVE_ASM_GLOBAL_DOT_NAME] (hidden_dot_def1): New macro.  Generate
	.global C_SYMBOL_DOT_NAME(alias).  Otherwise an empty macro.
	(hidden_def): Append hidden_dot_def1 macro to definition.
	(hidden_ver): Append hidden_dot_def1 macro to definition.
	(hidden_data_def): New macro.  Same as original hidden_def macro.
	(hidden_data_ver): New macro.  Same as original hidden_ver macro.
	[HAVE_ASM_GLOBAL_DOT_NAME] (hidden_dot_weak1): New macro.  Generate
	.weakext C_SYMBOL_DOT_NAME(alias).  Otherwise an empty macro.
	(hidden_weak): Append hidden_dot_weak1 macro to definition.
	(hidden_data_weak): New macro.  Same as original hidden_weak macro.
	[HAVE_ASM_GLOBAL_DOT_NAME] (HIDDEN_JUMPTARGET): Define as .__GI_name.
	Otherwise defined as __GI_name.
	(libc_hidden_data_def): New macro.  Use hidden_data_def.
	(libc_hidden_data_weak): New macro.  Use hidden_data_weak.
	(libc_hidden_data_ver): New macro.  Use hidden_data_ver.
	(rtld_hidden_data_def): New macro.  Use hidden_data_def.
	(rtld_hidden_data_weak): New macro.  Use hidden_data_weak.
	(rtld_hidden_data_ver): New macro.  Use hidden_data_ver.
	(libm_hidden_data_def): New macro.  Use hidden_data_def.
	(libm_hidden_data_weak): New macro.  Use hidden_data_weak.
	(libm_hidden_data_ver): New macro.  Use hidden_data_ver.
	* inet/in6_addr.c: Replace libc_hidden_def with libc_hidden_data_def.
	
	
>>>>>>> ppc64-libc-symbols.patch
diff -rupPN libc23-cvstip-20020916/include/libc-symbols.h libc23/include/libc-symbols.h
--- libc23-cvstip-20020916/include/libc-symbols.h	Wed Aug 28 18:11:37 2002
+++ libc23/include/libc-symbols.h	Tue Sep 17 09:10:03 2002
@@ -82,8 +82,15 @@
 # define ASM_LINE_SEP ;
 #endif
 
-#ifndef C_SYMBOL_DOT_NAME
-# define C_SYMBOL_DOT_NAME(name) .##name
+#ifdef HAVE_ASM_GLOBAL_DOT_NAME
+# ifndef C_SYMBOL_DOT_NAME
+#  if defined __GNUC__ && defined __GNUC_MINOR__ \
+      && (__GNUC__ << 16) + __GNUC_MINOR__ >= (3 << 16) + 1
+#   define C_SYMBOL_DOT_NAME(name) .name
+#  else
+#   define C_SYMBOL_DOT_NAME(name) .##name
+#  endif
+# endif
 #endif
 
 #ifndef __ASSEMBLER__
@@ -111,9 +118,21 @@
 /* Declare SYMBOL as weak undefined symbol (resolved to 0 if not defined).  */
 #  define weak_extern(symbol) _weak_extern (symbol)
 #  ifdef HAVE_ASM_WEAKEXT_DIRECTIVE
-#   define _weak_extern(symbol) asm (".weakext " __SYMBOL_PREFIX #symbol);
+#   ifdef HAVE_ASM_GLOBAL_DOT_NAME
+#    define _weak_extern(symbol) \
+        asm (".weakext " __SYMBOL_PREFIX #symbol "\n\t"	\
+	     ".weakext ." __SYMBOL_PREFIX #symbol);
+#   else
+#    define _weak_extern(symbol) asm (".weakext " __SYMBOL_PREFIX #symbol);
+#   endif
 #  else
-#   define _weak_extern(symbol)    asm (".weak " __SYMBOL_PREFIX #symbol);
+#   ifdef HAVE_ASM_GLOBAL_DOT_NAME
+#    define _weak_extern(symbol) \
+        asm (".weak " __SYMBOL_PREFIX #symbol "\n\t"	\
+	     ".weak ." __SYMBOL_PREFIX #symbol); 
+#   else
+#    define _weak_extern(symbol) asm (".weak " __SYMBOL_PREFIX #symbol);
+#   endif
 #  endif
 
 # else
@@ -126,45 +145,67 @@
 #else /* __ASSEMBLER__ */
 
 # ifdef HAVE_ASM_SET_DIRECTIVE
-#  define strong_alias(original, alias)		\
-  ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME (alias) ASM_LINE_SEP	\
+#  ifdef HAVE_ASM_GLOBAL_DOT_NAME
+#   define strong_alias(original, alias)				\
+  ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME (alias) ASM_LINE_SEP		\
+  .set C_SYMBOL_NAME (alias),C_SYMBOL_NAME (original) ASM_LINE_SEP	\
+  ASM_GLOBAL_DIRECTIVE C_SYMBOL_DOT_NAME (alias) ASM_LINE_SEP		\
+  .set C_SYMBOL_DOT_NAME (alias),C_SYMBOL_DOT_NAME (original)
+#   define strong_data_alias(original, alias)				\
+  ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME (alias) ASM_LINE_SEP		\
   .set C_SYMBOL_NAME (alias),C_SYMBOL_NAME (original)
+#  else
+#   define strong_alias(original, alias)				\
+  ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME (alias) ASM_LINE_SEP		\
+  .set C_SYMBOL_NAME (alias),C_SYMBOL_NAME (original)
+#   define strong_data_alias(original, alias) strong_alias(original, alias)
+#  endif
 # else
 #  ifdef HAVE_ASM_GLOBAL_DOT_NAME
-#   define strong_alias(original, alias)	\
-  ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME (alias) ASM_LINE_SEP	\
-  C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original) ASM_LINE_SEP	\
-  ASM_GLOBAL_DIRECTIVE C_SYMBOL_DOT_NAME (alias) ASM_LINE_SEP	\
+#   define strong_alias(original, alias)				\
+  ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME (alias) ASM_LINE_SEP		\
+  C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original) ASM_LINE_SEP		\
+  ASM_GLOBAL_DIRECTIVE C_SYMBOL_DOT_NAME (alias) ASM_LINE_SEP		\
   C_SYMBOL_DOT_NAME (alias) = C_SYMBOL_DOT_NAME (original)
+#   define strong_data_alias(original, alias)				\
+  ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME (alias) ASM_LINE_SEP		\
+  C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original)
 #  else
-#   define strong_alias(original, alias)	\
-  ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME (alias) ASM_LINE_SEP	\
+#   define strong_alias(original, alias)				\
+  ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME (alias) ASM_LINE_SEP		\
   C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original)
+#   define strong_data_alias(original, alias) strong_alias(original, alias)
 #  endif
 # endif
 
 # ifdef HAVE_WEAK_SYMBOLS
 #  ifdef HAVE_ASM_WEAKEXT_DIRECTIVE
-#   define weak_alias(original, alias)	\
+#   ifdef HAVE_ASM_GLOBAL_DOT_NAME
+#    define weak_alias(original, alias)					\
+  .weakext C_SYMBOL_NAME (alias), C_SYMBOL_NAME (original) ASM_LINE_SEP \
+  .weakext C_SYMBOL_DOT_NAME (alias), C_SYMBOL_DOT_NAME (original)
+#   else
+#    define weak_alias(original, alias)					\
   .weakext C_SYMBOL_NAME (alias), C_SYMBOL_NAME (original)
-#   define weak_extern(symbol)	\
+#   endif
+#   define weak_extern(symbol)						\
   .weakext C_SYMBOL_NAME (symbol)
 
 #  else /* ! HAVE_ASM_WEAKEXT_DIRECTIVE */
 
 #   ifdef HAVE_ASM_GLOBAL_DOT_NAME
-#    define weak_alias(original, alias)	\
-  .weak C_SYMBOL_NAME (alias) ASM_LINE_SEP			\
-  C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original) ASM_LINE_SEP	\
-  ASM_GLOBAL_DIRECTIVE C_SYMBOL_DOT_NAME (alias) ASM_LINE_SEP	\
+#    define weak_alias(original, alias)					\
+  .weak C_SYMBOL_NAME (alias) ASM_LINE_SEP				\
+  C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original) ASM_LINE_SEP		\
+  .weak C_SYMBOL_DOT_NAME (alias) ASM_LINE_SEP				\
   C_SYMBOL_DOT_NAME (alias) = C_SYMBOL_DOT_NAME (original)
 #   else
-#    define weak_alias(original, alias)	\
-  .weak C_SYMBOL_NAME (alias) ASM_LINE_SEP	\
+#    define weak_alias(original, alias)					\
+  .weak C_SYMBOL_NAME (alias) ASM_LINE_SEP				\
   C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original)
 #   endif
 
-#   define weak_extern(symbol)	\
+#   define weak_extern(symbol)						\
   .weak C_SYMBOL_NAME (symbol)
 
 #  endif /* ! HAVE_ASM_WEAKEXT_DIRECTIVE */
@@ -364,15 +405,33 @@
 # define default_symbol_version(real, name, version) \
      _default_symbol_version(real, name, version)
 # ifdef __ASSEMBLER__
-#  define _symbol_version(real, name, version) \
+#  ifdef HAVE_ASM_GLOBAL_DOT_NAME
+#   define _symbol_version(real, name, version) \
+     .symver real, name##@##version ASM_LINE_SEP			\
+     .symver .##real, .##name##@##version
+#   define _default_symbol_version(real, name, version) \
+     .symver real, name##@##@##version ASM_LINE_SEP			\
+     .symver .##real, .##name##@##@##version
+#  else
+#   define _symbol_version(real, name, version) \
      .symver real, name##@##version
-#  define _default_symbol_version(real, name, version) \
+#   define _default_symbol_version(real, name, version) \
      .symver real, name##@##@##version
+#  endif
 # else
-#  define _symbol_version(real, name, version) \
+#  ifdef HAVE_ASM_GLOBAL_DOT_NAME
+#   define _symbol_version(real, name, version) \
+     __asm__ (".symver " #real "," #name "@" #version "\n\t"	\
+	      ".symver ." #real ",." #name "@" #version)
+#   define _default_symbol_version(real, name, version) \
+     __asm__ (".symver " #real "," #name "@@" #version "\n\t"	\
+	      ".symver ." #real ",." #name "@@" #version)
+#  else
+#   define _symbol_version(real, name, version) \
      __asm__ (".symver " #real "," #name "@" #version)
-#  define _default_symbol_version(real, name, version) \
+#   define _default_symbol_version(real, name, version) \
      __asm__ (".symver " #real "," #name "@@" #version)
+#  endif
 # endif
 #else
 # define symbol_version(real, name, version)
@@ -439,6 +498,21 @@
    }
    libc_hidden_weak (foo)
 
+   Simularly for global data. If references to foo within libc.so should 
+   always go to foo defined in libc.so, then in include/foo.h you add:
+
+   libc_hidden_proto (foo)
+
+   line and after foo's definition:
+
+   int foo = INITIAL_FOO_VALUE;
+   libc_hidden_data_def (foo)
+
+   or
+
+   int foo = INITIAL_FOO_VALUE;
+   libc_hidden_data_weak (foo)
+
    If foo is normally just an alias (strong or weak) of some other function,
    you should use the normal strong_alias first, then add libc_hidden_def
    or libc_hidden_weak:
@@ -491,43 +565,63 @@
 #   define __hidden_def1(original, alias)			\
   ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME (alias) ASM_LINE_SEP	\
   .set C_SYMBOL_NAME (alias), C_SYMBOL_NAME (original)
-#  else
 #   ifdef HAVE_ASM_GLOBAL_DOT_NAME
-#    define __hidden_def1(original, alias)			\
-  ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME (alias) ASM_LINE_SEP	\
-  C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original) ASM_LINE_SEP	\
+#     define __hidden_dot_def1(original, alias)	 ASM_LINE_SEP	\
   ASM_GLOBAL_DIRECTIVE C_SYMBOL_DOT_NAME (alias) ASM_LINE_SEP	\
-  C_SYMBOL_DOT_NAME (alias) = C_SYMBOL_DOT_NAME (original)
+  .set C_SYMBOL_DOT_NAME (alias), C_SYMBOL_DOT_NAME (original)
 #   else
-#    define __hidden_def1(original, alias)			\
+#     define __hidden_dot_def1(original, alias)
+#   endif
+#  else
+#   define __hidden_def1(original, alias)			\
   ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME (alias) ASM_LINE_SEP	\
   C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original)
+#   ifdef HAVE_ASM_GLOBAL_DOT_NAME
+#    define __hidden_dot_def1(original, alias)	ASM_LINE_SEP	\
+  ASM_GLOBAL_DIRECTIVE C_SYMBOL_DOT_NAME (alias) ASM_LINE_SEP	\
+  C_SYMBOL_DOT_NAME (alias) = C_SYMBOL_DOT_NAME (original)
+#   else
+#    define __hidden_def1(original, alias)
 #   endif
 #  endif
 #  define __hidden_def2(...) #__VA_ARGS__
 #  define __hidden_def3(...) __hidden_def2 (__VA_ARGS__)
 #  define hidden_def(name)					\
+  __asm__ (__hidden_def3 (__hidden_def1 (__GI_##name, name) \
+  __hidden_dot_def1 (__GI_##name, name)));
+#  define hidden_data_def(name)					\
   __asm__ (__hidden_def3 (__hidden_def1 (__GI_##name, name)));
 #  define hidden_ver(local, name)				\
+  __asm__ (__hidden_def3 (__hidden_def1 (local, __GI_##name) \
+  __hidden_dot_def1 (local, __GI_##name)));
+#  define hidden_data_ver(local, name)				\
   __asm__ (__hidden_def3 (__hidden_def1 (local, __GI_##name)));
 #  ifdef HAVE_WEAK_SYMBOLS
 #   ifdef HAVE_ASM_WEAKEXT_DIRECTIVE
 #    define __hidden_weak1(original, alias)			\
   .weakext C_SYMBOL_NAME (alias), C_SYMBOL_NAME (original)
-#   else /* ! HAVE_ASM_WEAKEXT_DIRECTIVE */
 #    ifdef HAVE_ASM_GLOBAL_DOT_NAME
-#     define __hidden_weak1(original, alias)			\
+#     define __hidden_dot_weak1(original, alias)	ASM_LINE_SEP	\
+  .weakext C_SYMBOL_DOT_NAME (alias), C_SYMBOL_DOT_NAME (original)
+#    else
+#     define __hidden_dot_weak1(original, alias)	
+#    endif
+#   else /* ! HAVE_ASM_WEAKEXT_DIRECTIVE */
+#    define __hidden_weak1(original, alias)			\
   .weak C_SYMBOL_NAME (alias) ASM_LINE_SEP			\
-  C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original) ASM_LINE_SEP	\
+  C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original)
+#    ifdef HAVE_ASM_GLOBAL_DOT_NAME
+#     define __hidden_dot_weak1(original, alias)	ASM_LINE_SEP	\
   ASM_GLOBAL_DIRECTIVE C_SYMBOL_DOT_NAME (alias) ASM_LINE_SEP	\
   C_SYMBOL_DOT_NAME (alias) = C_SYMBOL_DOT_NAME (original)
 #    else
-#     define __hidden_weak1(original, alias)			\
-  .weak C_SYMBOL_NAME (alias) ASM_LINE_SEP			\
-  C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original)
+#     define __hidden_dot_weak1(original, alias)	
 #    endif
 #   endif
 #   define hidden_weak(name)					\
+  __asm__ (__hidden_def3 (__hidden_weak1 (__GI_##name, name) \
+  __hidden_dot_weak1 (__GI_##name, name)));
+#   define hidden_data_weak(name)					\
   __asm__ (__hidden_def3 (__hidden_weak1 (__GI_##name, name)));
 #  else
 #   define hidden_weak(name) hidden_def (name)
@@ -545,7 +639,14 @@
 #  define hidden_def(name)	strong_alias (name, __GI_##name)
 #  define hidden_weak(name)	hidden_def (name)
 #  define hidden_ver(local, name) strong_alias (local, __GI_##name)
-#  define HIDDEN_JUMPTARGET(name) __GI_##name
+#  define hidden_data_def(name)	strong_data_alias (name, __GI_##name)
+#  define hidden_data_weak(name)	hidden_data_def (name)
+#  define hidden_data_ver(local, name) strong_data_alias (local, __GI_##name)
+#  ifdef HAVE_ASM_GLOBAL_DOT_NAME
+#   define HIDDEN_JUMPTARGET(name) .__GI_##name
+#  else
+#   define HIDDEN_JUMPTARGET(name) __GI_##name
+#  endif
 # endif
 #else
 # ifndef __ASSEMBLER__
@@ -556,6 +657,9 @@
 # define hidden_weak(name)
 # define hidden_def(name)
 # define hidden_ver(local, name)
+# define hidden_data_weak(name)
+# define hidden_data_def(name)
+# define hidden_data_ver(local, name)
 #endif
 
 #if !defined NOT_IN_libc
@@ -563,11 +667,17 @@
 # define libc_hidden_def(name) hidden_def (name)
 # define libc_hidden_weak(name) hidden_weak (name)
 # define libc_hidden_ver(local, name) hidden_ver (local, name)
+# define libc_hidden_data_def(name) hidden_data_def (name)
+# define libc_hidden_data_weak(name) hidden_data_weak (name)
+# define libc_hidden_data_ver(local, name) hidden_data_ver (local, name)
 #else
 # define libc_hidden_proto(name)
 # define libc_hidden_def(name)
 # define libc_hidden_weak(name)
 # define libc_hidden_ver(local, name)
+# define libc_hidden_data_def(name)
+# define libc_hidden_data_weak(name)
+# define libc_hidden_data_ver(local, name)
 #endif
 
 #if defined NOT_IN_libc && defined IS_IN_rtld
@@ -575,11 +685,17 @@
 # define rtld_hidden_def(name) hidden_def (name)
 # define rtld_hidden_weak(name) hidden_weak (name)
 # define rtld_hidden_ver(local, name) hidden_ver (local, name)
+# define rtld_hidden_data_def(name) hidden_data_def (name)
+# define rtld_hidden_data_weak(name) hidden_data_weak (name)
+# define rtld_hidden_data_ver(local, name) hidden_data_ver (local, name)
 #else
 # define rtld_hidden_proto(name)
 # define rtld_hidden_def(name)
 # define rtld_hidden_weak(name)
 # define rtld_hidden_ver(local, name)
+# define rtld_hidden_data_def(name)
+# define rtld_hidden_data_weak(name)
+# define rtld_hidden_data_ver(local, name)
 #endif
 
 #if defined NOT_IN_libc && defined IS_IN_libm
@@ -587,11 +703,17 @@
 # define libm_hidden_def(name) hidden_def (name)
 # define libm_hidden_weak(name) hidden_weak (name)
 # define libm_hidden_ver(local, name) hidden_ver (local, name)
+# define libm_hidden_data_def(name) hidden_data_def (name)
+# define libm_hidden_data_weak(name) hidden_data_weak (name)
+# define libm_hidden_data_ver(local, name) hidden_data_ver (local, name)
 #else
 # define libm_hidden_proto(name)
 # define libm_hidden_def(name)
 # define libm_hidden_weak(name)
 # define libm_hidden_ver(local, name)
+# define libm_hidden_data_def(name)
+# define libm_hidden_data_weak(name)
+# define libm_hidden_data_ver(local, name)
 #endif
 
 #endif /* libc-symbols.h */
diff -rupPN libc23-cvstip-20020916/inet/in6_addr.c libc23/inet/in6_addr.c
--- libc23-cvstip-20020916/inet/in6_addr.c	Mon Aug  5 23:29:36 2002
+++ libc23/inet/in6_addr.c	Mon Sep 16 13:37:52 2002
@@ -21,7 +21,7 @@
 
 const struct in6_addr in6addr_any =
 { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } } };
-libc_hidden_def (in6addr_any)
+libc_hidden_data_def (in6addr_any)
 const struct in6_addr in6addr_loopback =
 { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 } } };
-libc_hidden_def (in6addr_loopback)
+libc_hidden_data_def (in6addr_loopback)
<<<<<<< ppc64-libc-symbols.patch


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]