[PATCH] Fix Alpha build
Jakub Jelinek
jakub@redhat.com
Sun Aug 4 14:53:00 GMT 2002
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
More information about the Libc-hacker
mailing list