From 453d8199be7ca2bc9885c9942f02b1e84ac041bf Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Thu, 28 Apr 2005 22:31:00 +0000 Subject: [PATCH] [BZ #781, BZ #796] 2005-04-28 Roland McGrath [BZ #796] * sysdeps/unix/sysv/linux/dl-sysdep.h: New file. Define NEED_DL_SYSINFO_DSO for all platforms. * sysdeps/generic/dl-sysdep.h: Remove multiple inclusion protection. * sysdeps/alpha/dl-sysdep.h: Likewise. Use #include_next instead of duplicating generic file's contents. * sysdeps/ia64/dl-sysdep.h: Likewise. * sysdeps/sparc/dl-sysdep.h: Likewise. 2005-03-22 Steven Munroe * sysdeps/powerpc/powerpc64/memset.S (memset): Make ___memset local. 2005-03-07 Steven Munroe [BZ #781] * sysdeps/unix/sysv/linux/kernel-features.h (__ASSUME_TGKILL): Define for powerpc32/64 starting with 2.6.1. (__ASSUME_UTIMES): Define for powerpc32/64 starting with 2.6.1. (__ASSUME_FADVISE64_64_SYSCALL): Define for powerpc32 only starting with 2.6.1. (__ASSUME_WAITID_SYSCALL): Don't define for powerpc32/64. --- ChangeLog | 26 ++++++++++++++++++++++ sysdeps/alpha/dl-sysdep.h | 21 ++---------------- sysdeps/generic/dl-sysdep.h | 8 +++---- sysdeps/ia64/dl-sysdep.h | 21 ++---------------- sysdeps/sparc/dl-sysdep.h | 21 ++---------------- sysdeps/unix/sysv/linux/dl-sysdep.h | 27 +++++++++++++++++++++++ sysdeps/unix/sysv/linux/kernel-features.h | 22 +++++++++++------- 7 files changed, 76 insertions(+), 70 deletions(-) create mode 100644 sysdeps/unix/sysv/linux/dl-sysdep.h diff --git a/ChangeLog b/ChangeLog index 6ba3213f39..37a608b342 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,29 @@ +2005-04-28 Roland McGrath + + [BZ #796] + * sysdeps/unix/sysv/linux/dl-sysdep.h: New file. + Define NEED_DL_SYSINFO_DSO for all platforms. + + * sysdeps/generic/dl-sysdep.h: Remove multiple inclusion protection. + * sysdeps/alpha/dl-sysdep.h: Likewise. + Use #include_next instead of duplicating generic file's contents. + * sysdeps/ia64/dl-sysdep.h: Likewise. + * sysdeps/sparc/dl-sysdep.h: Likewise. + +2005-03-22 Steven Munroe + + * sysdeps/powerpc/powerpc64/memset.S (memset): Make ___memset local. + +2005-03-07 Steven Munroe + + [BZ #781] + * sysdeps/unix/sysv/linux/kernel-features.h + (__ASSUME_TGKILL): Define for powerpc32/64 starting with 2.6.1. + (__ASSUME_UTIMES): Define for powerpc32/64 starting with 2.6.1. + (__ASSUME_FADVISE64_64_SYSCALL): Define for powerpc32 only starting + with 2.6.1. + (__ASSUME_WAITID_SYSCALL): Don't define for powerpc32/64. + 2005-04-28 Ulrich Drepper * sysdeps/i386/sysdep.h: Add cfi instrumentation to asm fragments. diff --git a/sysdeps/alpha/dl-sysdep.h b/sysdeps/alpha/dl-sysdep.h index 0b4c8050de..cd678f4e43 100644 --- a/sysdeps/alpha/dl-sysdep.h +++ b/sysdeps/alpha/dl-sysdep.h @@ -1,5 +1,5 @@ /* System-specific settings for dynamic linker code. Alpha version. - Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. + Copyright (C) 2002, 2003, 2004, 2005 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 @@ -17,25 +17,8 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#ifndef _DL_SYSDEP_H -#define _DL_SYSDEP_H 1 - -/* This macro must be defined to either 0 or 1. - - If 1, then an errno global variable hidden in ld.so will work right with - all the errno-using libc code compiled for ld.so, and there is never a - need to share the errno location with libc. This is appropriate only if - all the libc functions that ld.so uses are called without PLT and always - get the versions linked into ld.so rather than the libc ones. */ - -#ifdef IS_IN_rtld -# define RTLD_PRIVATE_ERRNO 1 -#else -# define RTLD_PRIVATE_ERRNO 0 -#endif +#include_next /* _dl_argv cannot be attribute_relro, because _dl_start_user might write into it after _dl_start returns. */ #define DL_ARGV_NOT_RELRO 1 - -#endif /* dl-sysdep.h */ diff --git a/sysdeps/generic/dl-sysdep.h b/sysdeps/generic/dl-sysdep.h index 565287027c..c99fd3ea36 100644 --- a/sysdeps/generic/dl-sysdep.h +++ b/sysdeps/generic/dl-sysdep.h @@ -1,5 +1,5 @@ /* System-specific settings for dynamic linker code. Generic version. - Copyright (C) 2002, 2003 Free Software Foundation, Inc. + Copyright (C) 2002, 2003, 2005 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 @@ -17,8 +17,8 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#ifndef _DL_SYSDEP_H -#define _DL_SYSDEP_H 1 +/* No multiple inclusion protection need here because it's just macros. + We don't want to use _DL_SYSDEP_H in case we are #include_next'd. */ /* This macro must be defined to either 0 or 1. @@ -33,5 +33,3 @@ #else # define RTLD_PRIVATE_ERRNO 0 #endif - -#endif /* dl-sysdep.h */ diff --git a/sysdeps/ia64/dl-sysdep.h b/sysdeps/ia64/dl-sysdep.h index 352bb3bed5..e4040efc4c 100644 --- a/sysdeps/ia64/dl-sysdep.h +++ b/sysdeps/ia64/dl-sysdep.h @@ -1,5 +1,5 @@ /* System-specific settings for dynamic linker code. IA-64 version. - Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. + Copyright (C) 2002, 2003, 2004, 2005 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 @@ -17,25 +17,8 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#ifndef _DL_SYSDEP_H -#define _DL_SYSDEP_H 1 - -/* This macro must be defined to either 0 or 1. - - If 1, then an errno global variable hidden in ld.so will work right with - all the errno-using libc code compiled for ld.so, and there is never a - need to share the errno location with libc. This is appropriate only if - all the libc functions that ld.so uses are called without PLT and always - get the versions linked into ld.so rather than the libc ones. */ - -#ifdef IS_IN_rtld -# define RTLD_PRIVATE_ERRNO 1 -#else -# define RTLD_PRIVATE_ERRNO 0 -#endif +#include_next /* _dl_argv cannot be attribute_relro, because _dl_start_user might write into it after _dl_start returns. */ #define DL_ARGV_NOT_RELRO 1 - -#endif /* dl-sysdep.h */ diff --git a/sysdeps/sparc/dl-sysdep.h b/sysdeps/sparc/dl-sysdep.h index eb6a788a89..2dee6b1f50 100644 --- a/sysdeps/sparc/dl-sysdep.h +++ b/sysdeps/sparc/dl-sysdep.h @@ -1,5 +1,5 @@ /* System-specific settings for dynamic linker code. SPARC version. - Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. + Copyright (C) 2002, 2003, 2004, 2005 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 @@ -17,25 +17,8 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#ifndef _DL_SYSDEP_H -#define _DL_SYSDEP_H 1 - -/* This macro must be defined to either 0 or 1. - - If 1, then an errno global variable hidden in ld.so will work right with - all the errno-using libc code compiled for ld.so, and there is never a - need to share the errno location with libc. This is appropriate only if - all the libc functions that ld.so uses are called without PLT and always - get the versions linked into ld.so rather than the libc ones. */ - -#ifdef IS_IN_rtld -# define RTLD_PRIVATE_ERRNO 1 -#else -# define RTLD_PRIVATE_ERRNO 0 -#endif +#include_next /* _dl_argv cannot be attribute_relro, because _dl_start_user might write into it after _dl_start returns. */ #define DL_ARGV_NOT_RELRO 1 - -#endif /* dl-sysdep.h */ diff --git a/sysdeps/unix/sysv/linux/dl-sysdep.h b/sysdeps/unix/sysv/linux/dl-sysdep.h new file mode 100644 index 0000000000..becfc8df3f --- /dev/null +++ b/sysdeps/unix/sysv/linux/dl-sysdep.h @@ -0,0 +1,27 @@ +/* System-specific settings for dynamic linker code. Linux version. + Copyright (C) 2005 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. */ + +#include_next + +/* On many architectures the kernel provides a virtual DSO and gives + AT_SYSINFO_EHDR to point us to it. As this is introduced for new + machines, we should look at it for unwind information even if + we aren't making direct use of it. So enable this across the board. */ + +#define NEED_DL_SYSINFO_DSO 1 diff --git a/sysdeps/unix/sysv/linux/kernel-features.h b/sysdeps/unix/sysv/linux/kernel-features.h index 83ebe0cf74..26cddd5a73 100644 --- a/sysdeps/unix/sysv/linux/kernel-features.h +++ b/sysdeps/unix/sysv/linux/kernel-features.h @@ -354,22 +354,24 @@ /* The tgkill syscall was instroduced for i386 in 2.5.75. For Alpha it was introduced in 2.6.0-test1 which unfortunately cannot be - distinguished from 2.6.0. On x86-64 it was introduced in - 2.6.0-test3. */ + distinguished from 2.6.0. On x86-64, ppc, and ppc64 it was + introduced in 2.6.0-test3. */ #if (__LINUX_KERNEL_VERSION >= 132427 && defined __i386__) \ || (__LINUX_KERNEL_VERSION >= 132609 && defined __alpha__) \ || (__LINUX_KERNEL_VERSION >= 132609 && defined __x86_64__) \ + || (__LINUX_KERNEL_VERSION >= 132609 && defined __powerpc__) \ || (__LINUX_KERNEL_VERSION >= 132609 && defined __sh__) # define __ASSUME_TGKILL 1 #endif /* The utimes syscall has been available for some architectures - forever. For x86 it was introduced after 2.5.75, for x86-64 in - 2.6.0-test3. */ + forever. For x86 it was introduced after 2.5.75, for x86-64, + ppc, and ppc64 it was introduced in 2.6.0-test3. */ #if defined __alpha__ || defined __ia64__ || defined __hppa__ \ || defined __sparc__ \ || (__LINUX_KERNEL_VERSION > 132427 && defined __i386__) \ || (__LINUX_KERNEL_VERSION > 132609 && defined __x86_64__) \ + || (__LINUX_KERNEL_VERSION >= 132609 && defined __powerpc__) \ || (__LINUX_KERNEL_VERSION >= 132609 && defined __sh__) # define __ASSUME_UTIMES 1 #endif @@ -383,8 +385,11 @@ #endif /* The fixed version of the posix_fadvise64 syscall appeared in - 2.6.0-test3. At least for x86. */ -#if __LINUX_KERNEL_VERSION >= 132609 && defined __i386__ + 2.6.0-test3. At least for x86. Powerpc support appeared in + 2.6.2, but for 32-bit userspace only. */ +#if (__LINUX_KERNEL_VERSION >= 132609 && defined __i386__) \ + || (__LINUX_KERNEL_VERSION >= 132610 && defined __powerpc__ \ + && !defined __powerpc64__) # define __ASSUME_FADVISE64_64_SYSCALL 1 #endif @@ -419,8 +424,9 @@ # define __ASSUME_BRK_PAGE_ROUNDED 1 #endif -/* Starting with version 2.6.9, the waitid system call is available. */ -#if __LINUX_KERNEL_VERSION >= 0x020609 +/* Starting with version 2.6.9, the waitid system call is available. + Except for powerpc and powerpc64. */ +#if __LINUX_KERNEL_VERSION >= 0x020609 && !defined __powerpc__ # define __ASSUME_WAITID_SYSCALL 1 #endif