summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog11
-rw-r--r--linuxthreads/ChangeLog7
-rw-r--r--linuxthreads/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h11
-rw-r--r--nptl/ChangeLog7
-rw-r--r--nptl/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h11
-rw-r--r--sysdeps/powerpc/powerpc64/elf/start.S6
-rw-r--r--sysdeps/s390/s390-32/elf/start.S20
-rw-r--r--sysdeps/s390/s390-64/elf/start.S6
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 <jakub@redhat.com>
+
+ * 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 <jakub@redhat.com>
+
+ * 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 <drepper@redhat.com>
* 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 <jakub@redhat.com>
+
+ * 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 <rth@redhat.com>
* 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 <jakub@redhat.com>
+
+ * 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 <rth@redhat.com>
* 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