From 57a5ea0215f9b7d6198927af695843aaffcd45a2 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Tue, 8 Jul 2003 03:49:44 +0000 Subject: [PATCH] Update. 2003-07-04 Jakub Jelinek * sysdeps/s390/s390-32/elf/start.S: Emit position independent code if PIC. * sysdeps/s390/s390-64/elf/start.S: Likewise. 2003-07-07 Jakub Jelinek * sysdeps/powerpc/powerpc64/elf/start.S: Put L(start_address) into .data.rel.ro.local section if PIC to avoid DT_TEXTREL. --- ChangeLog | 11 ++++++++++ linuxthreads/ChangeLog | 7 +++++++ .../unix/sysv/linux/ia64/sysdep-cancel.h | 11 +++++++++- nptl/ChangeLog | 7 +++++++ .../unix/sysv/linux/ia64/sysdep-cancel.h | 11 +++++++++- sysdeps/powerpc/powerpc64/elf/start.S | 6 +++++- sysdeps/s390/s390-32/elf/start.S | 20 +++++++++++++++++-- sysdeps/s390/s390-64/elf/start.S | 6 +++++- 8 files changed, 73 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index e9dba72bce..9ceb899296 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2003-07-04 Jakub Jelinek + + * sysdeps/s390/s390-32/elf/start.S: Emit position independent code + if PIC. + * sysdeps/s390/s390-64/elf/start.S: Likewise. + +2003-07-07 Jakub Jelinek + + * sysdeps/powerpc/powerpc64/elf/start.S: Put L(start_address) + into .data.rel.ro.local section if PIC to avoid DT_TEXTREL. + 2003-07-07 Ulrich Drepper * sysdeps/unix/sysv/linux/kernel-features.h: Version diff --git a/linuxthreads/ChangeLog b/linuxthreads/ChangeLog index a7b22cf22f..557aa1868d 100644 --- a/linuxthreads/ChangeLog +++ b/linuxthreads/ChangeLog @@ -1,3 +1,10 @@ +2003-07-04 Jakub Jelinek + + * sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h (PSEUDO): Use + different symbol for the cancellation syscall wrapper and + non-cancellation syscall wrapper. + (PSEUDO_END): Define. + 2003-07-05 Richard Henderson * sysdeps/alpha/elf/pt-initfini.c: Avoid .ent/.end. diff --git a/linuxthreads/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h b/linuxthreads/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h index 2545c9fe0a..ec17a37b9c 100644 --- a/linuxthreads/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h +++ b/linuxthreads/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h @@ -38,6 +38,11 @@ ENTRY (name) \ cmp.eq p6,p0=-1,r10; \ (p6) br.cond.spnt.few __syscall_error; \ ret;; \ + .endp name; \ + .proc __GC_##name; \ + .globl __GC_##name; \ + .hidden __GC_##name; \ +__GC_##name: \ .Lpseudo_cancel: \ .prologue; \ .regstk args, 5, args, 0; \ @@ -62,12 +67,13 @@ ENTRY (name) \ mov ar.pfs = loc0; \ .Lpseudo_end: \ ret; \ - .endp name; \ + .endp __GC_##name; \ .section .gnu.linkonce.t.__syscall_error_##args, "ax"; \ .align 32; \ .proc __syscall_error_##args; \ .global __syscall_error_##args; \ .hidden __syscall_error_##args; \ + .size __syscall_error_##args, 64; \ __syscall_error_##args: \ .prologue; \ .regstk args, 5, args, 0; \ @@ -82,6 +88,9 @@ __syscall_error_##args: \ mov r8 = -1; \ mov ar.pfs = loc0 +#undef PSEUDO_END +#define PSEUDO_END(name) .endp + # ifdef IS_IN_libpthread # define CENABLE br.call.sptk.many b0 = __pthread_enable_asynccancel # define CDISABLE br.call.sptk.many b0 = __pthread_disable_asynccancel diff --git a/nptl/ChangeLog b/nptl/ChangeLog index 27926968bc..4cd3cf0846 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -1,3 +1,10 @@ +2003-07-04 Jakub Jelinek + + * sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h (PSEUDO): Use + different symbol for the cancellation syscall wrapper and + non-cancellation syscall wrapper. + (PSEUDO_END): Define. + 2003-07-05 Richard Henderson * sysdeps/alpha/elf/pt-initfini.c: Avoid .ent/.end. diff --git a/nptl/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h b/nptl/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h index 00662e9d6b..45270c1e25 100644 --- a/nptl/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h +++ b/nptl/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h @@ -38,6 +38,11 @@ ENTRY (name) \ cmp.eq p6,p0=-1,r10; \ (p6) br.cond.spnt.few __syscall_error; \ ret;; \ + .endp name; \ + .proc __GC_##name; \ + .globl __GC_##name; \ + .hidden __GC_##name; \ +__GC_##name: \ .Lpseudo_cancel: \ .prologue; \ .regstk args, 5, args, 0; \ @@ -62,12 +67,13 @@ ENTRY (name) \ mov ar.pfs = loc0; \ .Lpseudo_end: \ ret; \ - .endp name; \ + .endp __GC_##name; \ .section .gnu.linkonce.t.__syscall_error_##args, "ax"; \ .align 32; \ .proc __syscall_error_##args; \ .global __syscall_error_##args; \ .hidden __syscall_error_##args; \ + .size __syscall_error_##args, 64; \ __syscall_error_##args: \ .prologue; \ .regstk args, 5, args, 0; \ @@ -82,6 +88,9 @@ __syscall_error_##args: \ mov r8 = -1; \ mov ar.pfs = loc0 +#undef PSEUDO_END +#define PSEUDO_END(name) .endp + # ifdef IS_IN_libpthread # define CENABLE br.call.sptk.many b0 = __pthread_enable_asynccancel # define CDISABLE br.call.sptk.many b0 = __pthread_disable_asynccancel diff --git a/sysdeps/powerpc/powerpc64/elf/start.S b/sysdeps/powerpc/powerpc64/elf/start.S index 65fa52c0f5..60864a1190 100644 --- a/sysdeps/powerpc/powerpc64/elf/start.S +++ b/sysdeps/powerpc/powerpc64/elf/start.S @@ -1,5 +1,5 @@ /* Startup code for programs linked with GNU libc. PowerPC64 version. - Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + Copyright (C) 1998,1999,2000,2001,2002,2003 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 @@ -21,7 +21,11 @@ #include "bp-sym.h" /* These are the various addresses we require. */ +#ifdef PIC + .section ".data.rel.ro.local" +#else .section ".rodata" +#endif .align 3 L(start_addresses): .quad 0 /* was _SDA_BASE_ but not in 64-bit ABI*/ diff --git a/sysdeps/s390/s390-32/elf/start.S b/sysdeps/s390/s390-32/elf/start.S index 1a0436b9a5..610a7c9155 100644 --- a/sysdeps/s390/s390-32/elf/start.S +++ b/sysdeps/s390/s390-32/elf/start.S @@ -1,5 +1,5 @@ /* Startup code compliant to the ELF s390 ABI. - Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc. + Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). This file is part of the GNU C Library. @@ -66,19 +66,35 @@ _start: l %r6,.L2-.Llit(%r13) # load pointer to __libc_csu_fini l %r5,.L1-.Llit(%r13) # load pointer to __libc_csu_init l %r2,.L3-.Llit(%r13) # load pointer to main + l %r1,.L4-.Llit(%r13) # load pointer to __libc_start_main +#ifdef PIC + l %r12,.L5-.Llit(%r13) # load .got pointer + la %r6,0(%r13,%r6) + la %r5,0(%r13,%r5) + la %r2,0(%r13,%r2) + la %r1,0(%r13,%r1) + la %r12,0(%r13,%r12) +#endif /* ok, now branch to the libc main routine */ - l %r1,.L4-.Llit(%r13) basr %r14,%r1 /* crash if __libc_start_main returns */ .word 0 .Llit: +#ifndef PIC .L1: .long __libc_csu_init .L2: .long __libc_csu_fini .L3: .long main .L4: .long __libc_start_main +#else +.L1: .long __libc_csu_init-.Llit +.L2: .long __libc_csu_fini-.Llit +.L3: .long main-.Llit +.L4: .long __libc_start_main@plt-.Llit +.L5: .long _GLOBAL_OFFSET_TABLE_-.Llit +#endif /* FIXME: FPU flags or what ?!? */ diff --git a/sysdeps/s390/s390-64/elf/start.S b/sysdeps/s390/s390-64/elf/start.S index 687a23cc67..8ba4695e18 100644 --- a/sysdeps/s390/s390-64/elf/start.S +++ b/sysdeps/s390/s390-64/elf/start.S @@ -1,5 +1,5 @@ /* Startup code compliant to the 64 bit S/390 ELF ABI. - Copyright (C) 2001, 2002 Free Software Foundation, Inc. + Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). This file is part of the GNU C Library. @@ -64,7 +64,11 @@ _start: larl %r2,main # load pointer to main /* Ok, now branch to the libc main routine. */ +#ifdef PIC + brasl %r14,__libc_start_main@plt +#else brasl %r14,__libc_start_main +#endif /* Crash if __libc_start_main returns. */ .word 0