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] |
On Thu, Jan 31, 2002 at 04:35:31PM +0100, Jakub Jelinek wrote: > Hi! > > The following patch moves internal glibc symbols to GLIBC_PRIVATE symbol > version. Glibc bootstrap is still running, I'm posting this just to hear > feedback if you find any symbols which aren't actually private but are > marked so, or if you come up with symbols which aren't marked as private by > this patch although they are. There is a problem, since there are no more @GLIBC_2.2 symbols in ld.so, but fxstat64.c and xstat64.c on i386-linux comes with __xstat64@@GLIBC_2.2 and __xstat64@GLIBC_2.1, which is not something the linker is happy about (well, doesn't link ld.so). IMHO it is a bug that ld.so actually exports *xstat64, it shouldn't (and didn't used to 2 years ago). Here is a patch (with which + GLIBC_PRIVATE patch glibc bootstrapped): 2002-01-31 Jakub Jelinek <jakub@redhat.com> * elf/Makefile (rtld-routines): Add dl-xstat64, dl-fxstat64. * elf/dl-xstat64.c: New file. * elf/dl-fxstat64.c: New file. * sysdeps/unix/sysv/linux/fxstat64.c: If RTLD_STAT64 is defined, don't export __fxstat64 at multiple versions. * sysdeps/unix/sysv/linux/lxstat64.c: Similarly. * sysdeps/unix/sysv/linux/xstat64.c: Similarly. --- libc/elf/Makefile.jj Wed Jan 30 18:40:00 2002 +++ libc/elf/Makefile Thu Jan 31 19:10:50 2002 @@ -37,7 +37,8 @@ elide-routines.os = $(all-dl-routines) d # ld.so uses those routines, plus some special stuff for being the program # interpreter and operating independent of libc. -rtld-routines := rtld $(dl-routines) dl-sysdep dl-environ dl-minimal +rtld-routines := rtld $(dl-routines) dl-sysdep dl-environ dl-minimal \ + dl-xstat64 dl-fxstat64 all-rtld-routines = $(rtld-routines) $(sysdep-rtld-routines) distribute := $(rtld-routines:=.c) dynamic-link.h do-rel.h dl-machine.h \ --- libc/elf/dl-xstat64.c.jj Thu Jan 31 18:41:11 2002 +++ libc/elf/dl-xstat64.c Thu Jan 31 18:43:25 2002 @@ -0,0 +1,25 @@ +/* Dynamic linker's private version of __xstat64. + Copyright (C) 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 + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +/* This special file is needed because some xstat64.c implementations + use versioning for __xstat64 and we need to keep it local to + the dynamic linker. */ + +#define RTLD_STAT64 +#include <xstat64.c> --- libc/elf/dl-fxstat64.c.jj Thu Jan 31 18:41:11 2002 +++ libc/elf/dl-fxstat64.c Thu Jan 31 18:43:49 2002 @@ -0,0 +1,25 @@ +/* Dynamic linker's private version of __fxstat64. + Copyright (C) 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 + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +/* This special file is needed because some fxstat64.c implementations + use versioning for __fxstat64 and we need to keep it local to + the dynamic linker. */ + +#define RTLD_STAT64 +#include <fxstat64.c> --- libc/sysdeps/unix/sysv/linux/fxstat64.c.jj Thu Aug 23 18:50:44 2001 +++ libc/sysdeps/unix/sysv/linux/fxstat64.c Thu Jan 31 19:13:41 2002 @@ -1,5 +1,5 @@ /* fxstat64 using old-style Unix fstat system call. - Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. + Copyright (C) 1997,1998,1999,2000,2001,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 @@ -85,11 +85,16 @@ ___fxstat64 (int vers, int fd, struct st #endif } -#include <shlib-compat.h> +#ifndef RTLD_STAT64 +# include <shlib-compat.h> versioned_symbol (libc, ___fxstat64, __fxstat64, GLIBC_2_2); -#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2) +# if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2) strong_alias (___fxstat64, __old__fxstat64) compat_symbol (libc, __old__fxstat64, __fxstat64, GLIBC_2_1); +# endif + +#else +strong_alias (___fxstat64, __fxstat64); #endif --- libc/sysdeps/unix/sysv/linux/lxstat64.c.jj Thu Aug 23 18:50:44 2001 +++ libc/sysdeps/unix/sysv/linux/lxstat64.c Thu Jan 31 19:12:46 2002 @@ -1,5 +1,5 @@ /* lxstat64 using old-style Unix lstat system call. - Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. + Copyright (C) 1997,1998,1999,2000,2001,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 @@ -87,11 +87,16 @@ ___lxstat64 (int vers, const char *name, #endif } -#include <shlib-compat.h> +#ifndef RTLD_STAT64 +# include <shlib-compat.h> versioned_symbol (libc, ___lxstat64, __lxstat64, GLIBC_2_2); -#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2) +# if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2) strong_alias (___lxstat64, __old__lxstat64) compat_symbol (libc, __old__lxstat64, __lxstat64, GLIBC_2_1); +# endif + +#else +strong_alias (___lxstat64, __lxstat64); #endif --- libc/sysdeps/unix/sysv/linux/xstat64.c.jj Thu Aug 23 18:50:47 2001 +++ libc/sysdeps/unix/sysv/linux/xstat64.c Thu Jan 31 19:13:15 2002 @@ -1,5 +1,5 @@ /* xstat64 using old-style Unix stat system call. - Copyright (C) 1991,95,96,97,98,99,2000,2001 Free Software Foundation, Inc. + Copyright (C) 1991,95,96,97,98,99,2000,01,02 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 @@ -91,11 +91,16 @@ ___xstat64 (int vers, const char *name, #endif } -#include <shlib-compat.h> +#ifndef RTLD_STAT64 +# include <shlib-compat.h> versioned_symbol (libc, ___xstat64, __xstat64, GLIBC_2_2); -#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2) +# if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2) strong_alias (___xstat64, __old__xstat64) compat_symbol (libc, __old__xstat64, __xstat64, GLIBC_2_1); +# endif + +#else +strong_alias (___xstat64, __xstat64); #endif Jakub
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |