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

Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.


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] Fix Alpha build


Hi!

The following patch makes alpha glibc build (and not end
up with:
/usr/src/redhat/BUILD/glibc-2.2.90/build-alpha-linux/libc.so.6.1: undefined reference to `__GI___wcstoull_internal'
/usr/src/redhat/BUILD/glibc-2.2.90/build-alpha-linux/libc.so.6.1: undefined reference to `__GI_globfree'
/usr/src/redhat/BUILD/glibc-2.2.90/build-alpha-linux/libc.so.6.1: undefined reference to `__GI_____strtoull_l_internal'
/usr/src/redhat/BUILD/glibc-2.2.90/build-alpha-linux/libc.so.6.1: undefined reference to `__GI___strtoull_internal'
/usr/src/redhat/BUILD/glibc-2.2.90/build-alpha-linux/libc.so.6.1: undefined reference to `__GI___strtoll_internal'
/usr/src/redhat/BUILD/glibc-2.2.90/build-alpha-linux/libc.so.6.1: undefined reference to `__GI_glob'
).
The important thing is that when playing games like
various sysdeps/wordsize-64/*.c routines do, ie. #define foo bar
#include <something.c>
#undef foo
*_alias(baz, foo)

libc_hidden_{def,weak} (foo) cannot be used, because there is no
libc_hidden_proto (foo) in this case. Instead, libc_hidden_ver should be
used, or alternatively all this ugly magic could go away if
asm_weak_alias and asm_strong_alias macros are introduced and used in this
case (macros which would do th same as non-asm_ variants, but in
pure assembly, so it wouldn't matter that the 2 functions have different
prototypes).

IA-64 doesn't build either (even with this patch), will look into it tomorrow morning.

2002-08-04  Jakub Jelinek  <jakub@redhat.com>

	* sysdeps/generic/glob.c (glob, globfree): Only use libc_hidden_def
	if glob resp. globfree are not macros.
	* sysdeps/gnu/glob64.c (globfree64): Add libc_hidden_def.
	* sysdeps/unix/sysv/linux/alpha/glob.c (glob, globfree, globfree64):
	Add libc_hidden_ver.
	* sysdeps/unix/sysv/linux/i386/glob64.c (globfree64): Add
	libc_hidden_def.
	* sysdeps/wordsize-64/glob.c (globfree64): Use libc_hidden_ver
	instead of libc_hidden_weak.
	* sysdeps/wordsize-64/strtol.c (__strtoll_internal): Use
	libc_hidden_ver instead of libc_hidden_def.
	* sysdeps/wordsize-64/wcstol.c (__wcstoll_internal): Use
	libc_hidden_ver instead of libc_hidden_def.
	(wcstoll, wcstoq): Remove libc_hidden_weak.
	* sysdeps/wordsize-64/strtol_l.c (____strtoll_l_internal): Add
	libc_hidden_ver.
	* sysdeps/wordsize-64/strtoul.c (__strtoull_internal): Add
	libc_hidden_ver.
	* sysdeps/wordsize-64/strtoul_l.c (____strtoull_l_internal): Add
	libc_hidden_ver.
	* sysdeps/wordsize-64/wcstoul.c (__wcstoull_internal): Add
	libc_hidden_ver.

--- libc/sysdeps/generic/glob.c.jj	2002-08-04 20:23:24.000000000 +0200
+++ libc/sysdeps/generic/glob.c	2002-08-04 20:57:22.000000000 +0200
@@ -1064,7 +1064,7 @@ glob (pattern, flags, errfunc, pglob)
 
   return 0;
 }
-#ifdef _LIBC
+#if defined _LIBC && !defined glob
 libc_hidden_def (glob)
 #endif
 
@@ -1085,7 +1085,7 @@ globfree (pglob)
       free ((__ptr_t) pglob->gl_pathv);
     }
 }
-#ifdef _LIBC
+#if defined _LIBC && !defined globfree
 libc_hidden_def (globfree)
 #endif
 
--- libc/sysdeps/gnu/glob64.c.jj	2001-02-16 11:46:40.000000000 +0100
+++ libc/sysdeps/gnu/glob64.c	2002-08-04 21:07:22.000000000 +0200
@@ -20,3 +20,5 @@
 #define COMPILE_GLOB64	1
 
 #include <sysdeps/generic/glob.c>
+
+libc_hidden_def (globfree64)
--- libc/sysdeps/unix/sysv/linux/alpha/glob.c.jj	2001-08-23 18:50:48.000000000 +0200
+++ libc/sysdeps/unix/sysv/linux/alpha/glob.c	2002-08-04 21:45:03.000000000 +0200
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1998, 2000, 2002 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -44,6 +44,9 @@ extern void __new_globfree (glob_t *__pg
 
 versioned_symbol (libc, __new_glob, glob, GLIBC_2_1);
 versioned_symbol (libc, __new_globfree, globfree, GLIBC_2_1);
+libc_hidden_ver (__new_glob, glob)
+libc_hidden_ver (__new_globfree, globfree)
 
 weak_alias (__new_glob, glob64)
 weak_alias (__new_globfree, globfree64)
+libc_hidden_ver (__new_globfree, globfree64)
--- libc/sysdeps/unix/sysv/linux/i386/glob64.c.jj	2001-02-16 11:46:40.000000000 +0100
+++ libc/sysdeps/unix/sysv/linux/i386/glob64.c	2002-08-04 21:14:35.000000000 +0200
@@ -23,6 +23,8 @@
 
 #include "shlib-compat.h"
 
+libc_hidden_def (globfree64)
+
 versioned_symbol (libc, __glob64, glob64, GLIBC_2_2);
 
 #if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
--- libc/sysdeps/wordsize-64/glob.c.jj	2002-08-04 20:23:29.000000000 +0200
+++ libc/sysdeps/wordsize-64/glob.c	2002-08-04 21:44:23.000000000 +0200
@@ -5,4 +5,4 @@
 #undef globfree64
 weak_alias (glob, glob64)
 weak_alias (globfree, globfree64)
-libc_hidden_weak (globfree64)
+libc_hidden_ver (globfree, globfree64)
--- libc/sysdeps/wordsize-64/strtol.c.jj	2002-08-04 20:23:29.000000000 +0200
+++ libc/sysdeps/wordsize-64/strtol.c	2002-08-04 21:45:55.000000000 +0200
@@ -9,6 +9,6 @@
 #undef strtoll
 #undef strtoq
 strong_alias (__strtol_internal, __strtoll_internal)
-libc_hidden_def (__strtoll_internal)
+libc_hidden_ver (__strtol_internal, __strtoll_internal)
 weak_alias (strtol, strtoll)
 weak_alias (strtol, strtoq)
--- libc/sysdeps/wordsize-64/wcstol.c.jj	2002-08-04 20:23:29.000000000 +0200
+++ libc/sysdeps/wordsize-64/wcstol.c	2002-08-04 21:46:24.000000000 +0200
@@ -9,8 +9,6 @@
 #undef wcstoll
 #undef wcstoq
 strong_alias (__wcstol_internal, __wcstoll_internal)
-libc_hidden_def (__wcstoll_internal)
+libc_hidden_ver (__wcstol_internal, __wcstoll_internal)
 weak_alias (wcstol, wcstoll)
-libc_hidden_weak (wcstoll)
 weak_alias (wcstol, wcstoq)
-libc_hidden_weak (wcstoq)
--- libc/sysdeps/wordsize-64/strtol_l.c.jj	2001-01-05 22:58:22.000000000 +0100
+++ libc/sysdeps/wordsize-64/strtol_l.c	2002-08-04 21:48:34.000000000 +0200
@@ -7,4 +7,5 @@
 #undef ____strtoll_l_internal
 #undef __strtoll_l
 strong_alias (____strtol_l_internal, ____strtoll_l_internal)
+libc_hidden_ver (____strtol_l_internal, ____strtoll_l_internal)
 weak_alias (__strtol_l, __strtoll_l)
--- libc/sysdeps/wordsize-64/strtoul.c.jj	2001-01-05 22:58:22.000000000 +0100
+++ libc/sysdeps/wordsize-64/strtoul.c	2002-08-04 22:22:26.000000000 +0200
@@ -9,5 +9,6 @@
 #undef strtoull
 #undef strtouq
 strong_alias (__strtoul_internal, __strtoull_internal)
+libc_hidden_ver (__strtoul_internal, __strtoull_internal)
 weak_alias (strtoul, strtoull)
 weak_alias (strtoul, strtouq)
--- libc/sysdeps/wordsize-64/strtoul_l.c.jj	2001-01-05 22:58:22.000000000 +0100
+++ libc/sysdeps/wordsize-64/strtoul_l.c	2002-08-04 21:49:44.000000000 +0200
@@ -7,4 +7,5 @@
 #undef ____strtoull_l_internal
 #undef __strtoull_l
 strong_alias (____strtoul_l_internal, ____strtoull_l_internal)
+libc_hidden_ver (____strtoul_l_internal, ____strtoull_l_internal)
 weak_alias (__strtoul_l, __strtoull_l)
--- libc/sysdeps/wordsize-64/wcstoul.c.jj	2001-01-05 22:58:22.000000000 +0100
+++ libc/sysdeps/wordsize-64/wcstoul.c	2002-08-04 21:50:41.000000000 +0200
@@ -9,5 +9,6 @@
 #undef wcstoull
 #undef wcstouq
 strong_alias (__wcstoul_internal, __wcstoull_internal)
+libc_hidden_ver (__wcstoul_internal, __wcstoull_internal)
 weak_alias (wcstoul, wcstoull)
 weak_alias (wcstoul, wcstouq)

	Jakub


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