aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog77
-rw-r--r--elf/Makefile8
-rw-r--r--elf/dl-close.c5
-rw-r--r--elf/tls-macros.h69
-rw-r--r--elf/tst-array4.c18
-rw-r--r--elf/tst-array4.exp19
-rw-r--r--linuxthreads/ChangeLog16
-rw-r--r--linuxthreads/sysdeps/sparc/sparc32/pt-machine.h8
-rw-r--r--linuxthreads/sysdeps/sparc/sparc64/pt-machine.h8
-rw-r--r--linuxthreads/sysdeps/sparc/tls.h53
-rw-r--r--linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h6
-rw-r--r--linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S2
-rw-r--r--linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h6
-rw-r--r--linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S2
-rw-r--r--sysdeps/powerpc/powerpc32/Dist1
-rw-r--r--sysdeps/powerpc/powerpc32/Makefile1
-rw-r--r--sysdeps/sparc/dl-tls.h (renamed from sysdeps/powerpc/powerpc32/divdi3.c)32
-rw-r--r--sysdeps/sparc/sparc32/dl-machine.h72
-rw-r--r--sysdeps/sparc/sparc32/elf/configure.in43
-rw-r--r--sysdeps/sparc/sparc32/memchr.S14
-rw-r--r--sysdeps/sparc/sparc32/memcpy.S138
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/hp-timing.h14
-rw-r--r--sysdeps/sparc/sparc32/strcat.S14
-rw-r--r--sysdeps/sparc/sparc32/strchr.S10
-rw-r--r--sysdeps/sparc/sparc32/strcmp.S8
-rw-r--r--sysdeps/sparc/sparc32/strcpy.S14
-rw-r--r--sysdeps/sparc/sparc64/hp-timing.h4
-rw-r--r--sysdeps/sparc/sparc64/memcpy.S120
-rw-r--r--sysdeps/sparc/sparc64/sparcv9b/memcpy.S26
-rw-r--r--sysdeps/sparc/sparc64/stpcpy.S40
-rw-r--r--sysdeps/sparc/sparc64/stpncpy.S64
-rw-r--r--sysdeps/sparc/sparc64/strcat.S22
-rw-r--r--sysdeps/sparc/sparc64/strchr.S16
-rw-r--r--sysdeps/sparc/sparc64/strcmp.S38
-rw-r--r--sysdeps/sparc/sparc64/strcpy.S22
-rw-r--r--sysdeps/sparc/sparc64/strncmp.S20
-rw-r--r--sysdeps/sparc/sparc64/strncpy.S16
-rw-r--r--sysdeps/unix/mips/sysdep.S19
-rw-r--r--sysdeps/unix/sysv/linux/mips/pread.c28
-rw-r--r--sysdeps/unix/sysv/linux/mips/pread64.c29
-rw-r--r--sysdeps/unix/sysv/linux/mips/pwrite.c30
-rw-r--r--sysdeps/unix/sysv/linux/mips/pwrite64.c28
-rw-r--r--sysdeps/unix/sysv/linux/mips/sysdep.h10
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc64/fe_nomask.c30
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/socket.S30
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h4
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h4
-rw-r--r--sysdeps/wordsize-32/divdi3.c13
-rw-r--r--sysdeps/wordsize-32/lldiv.c7
49 files changed, 893 insertions, 385 deletions
diff --git a/ChangeLog b/ChangeLog
index 20451a371f..37cebd01be 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,80 @@
+2003-01-26 Andreas Schwab <schwab@suse.de>
+
+ * sysdeps/wordsize-32/divdi3.c: Export the functions only as
+ compatibility symbols. Remove INTDEF for __divdi3.
+ * sysdeps/wordsize-32/lldiv.c: Don't use __divdi3_internal.
+ * sysdeps/powerpc/powerpc32/divdi3.c: Remove.
+ * sysdeps/powerpc/powerpc32/Makefile (CPPFLAGS-divdi3.c): Don't
+ define.
+ * sysdeps/powerpc/powerpc32/Dist: Remove divdi3.c.
+
+2003-01-24 Jakub Jelinek <jakub@redhat.com>
+
+ * elf/tls-macros.h: Add SPARC 32-bit definitions.
+ * sysdeps/sparc/sparc32/elf/configure.in: Add TLS check.
+ * sysdeps/sparc/sparc32/dl-machine.h: Add dl_machine_h guards
+ for the first half of the header. Include tls.h.
+ (elf_machine_type_class): Return ELF_RTYPE_CLASS_PLT for TLS
+ relocs too.
+ (elf_machine_rela): Handle TLS relocs.
+ * sysdeps/sparc/dl-tls.h: New file.
+
+ * sysdeps/unix/sysv/linux/sparc/sparc32/socket.S: Add cancellation
+ support.
+
+ * sysdeps/sparc/sparc32/sparcv9/hp-timing.h: Use %g6 instead of %g7.
+ * sysdeps/sparc/sparc32/memchr.S: Likewise.
+ * sysdeps/sparc/sparc32/memcpy.S: Likewise.
+ * sysdeps/sparc/sparc32/strcat.S: Likewise.
+ * sysdeps/sparc/sparc32/strchr.S: Likewise.
+ * sysdeps/sparc/sparc32/strcmp.S: Likewise.
+ * sysdeps/sparc/sparc32/strcpy.S: Likewise.
+ * sysdeps/sparc/sparc64/sparcv9b/memcpy.S: Likewise.
+ * sysdeps/sparc/sparc64/hp-timing.h: Likewise.
+ * sysdeps/sparc/sparc64/memcpy.S: Likewise.
+ * sysdeps/sparc/sparc64/stpcpy.S: Likewise.
+ * sysdeps/sparc/sparc64/stpncpy.S: Likewise.
+ * sysdeps/sparc/sparc64/strcat.S: Likewise.
+ * sysdeps/sparc/sparc64/strchr.S: Likewise.
+ * sysdeps/sparc/sparc64/strcmp.S: Likewise.
+ * sysdeps/sparc/sparc64/strcpy.S: Likewise.
+ * sysdeps/sparc/sparc64/strncmp.S: Likewise.
+ * sysdeps/sparc/sparc64/strncpy.S: Likewise.
+ * sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h: Likewise.
+ * sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h: Likewise.
+
+2003-01-24 Andreas Schwab <schwab@suse.de>
+
+ * elf/dl-close.c (_dl_close): Don't relocate DT_FINI_ARRAY
+ elements, and process them backwards.
+ * elf/Makefile ($(objpfx)tst-array4): New target.
+ ($(objpfx)tst-array4.out): Likewise.
+ (tests) [$(have-initfini-array) = yes]: Add tst-array4.
+ * elf/tst-array4.c: New file.
+ * elf/tst-array4.exp: Likewise.
+
+2003-01-24 Steven Munroe <sjmunroe@us.ibm.com>
+
+ * sysdeps/unix/sysv/linux/powerpc/powerpc64/fe_nomask.c: New file.
+
+2003-01-27 Guido Guenther <agx@sigxcpu.org>
+
+ * sysdeps/unix/sysv/linux/mips/sysdep.h (SYSCALL_ERROR_LABEL): Define.
+ * sysdeps/unix/sysv/linux/mips/pread.c: Add support for
+ cancellation handling and handle both __NR_pread64 and __NR_pread.
+ * sysdeps/unix/sysv/linux/mips/pread64.c: Likewise.
+ * sysdeps/unix/sysv/linux/mips/pwrite.c: Add support for
+ cancellation handling and handle both __NR_pwrite64 and __NR_pwrite.
+ * sysdeps/unix/sysv/linux/mips/pwrite64.c: Likewise.
+ * sysdeps/unix/mips/sysdep.S: Don't set errno in the _LIBC_REENTRANT
+ case, use register names consistently.
+
+2003-01-27 Wolfram Gloger <wg@malloc.de>
+
+ * malloc/hooks.c (mem2chunk_check): Check alignment of mem
+ pointer, not of the computed chunk. Bug report from Carlos
+ O'Donell <carlos@baldric.uwo.ca>.
+
2003-01-25 Andreas Schwab <schwab@suse.de>
* sysdeps/m68k/dl-machine.h (_dl_start_user): Use pc-relative
diff --git a/elf/Makefile b/elf/Makefile
index c6320d8867..09ea94800d 100644
--- a/elf/Makefile
+++ b/elf/Makefile
@@ -121,7 +121,7 @@ endif
tests = tst-tls1 tst-tls2 tst-tls9
ifeq (yes,$(have-initfini-array))
-tests += tst-array1 tst-array2 tst-array3
+tests += tst-array1 tst-array2 tst-array3 tst-array4
endif
ifeq (yes,$(build-static))
tests-static = tst-tls1-static tst-tls2-static
@@ -594,6 +594,12 @@ $(objpfx)tst-array3.out: $(objpfx)tst-array3
$(objpfx)tst-array3 > $@
cmp $@ tst-array1.exp > /dev/null
+$(objpfx)tst-array4: $(libdl)
+$(objpfx)tst-array4.out: $(objpfx)tst-array4 $(objpfx)tst-array2dep.so
+ $(elf-objpfx)$(rtld-installed-name) \
+ --library-path $(rpath-link)$(patsubst %,:%,$(sysdep-library-path)) \
+ $< > $@
+ cmp $@ tst-array4.exp > /dev/null
check-textrel-CFLAGS = -O
$(objpfx)check-textrel: check-textrel.c
diff --git a/elf/dl-close.c b/elf/dl-close.c
index cdebc739e8..1d4a8c3653 100644
--- a/elf/dl-close.c
+++ b/elf/dl-close.c
@@ -238,10 +238,9 @@ _dl_close (void *_map)
+ imap->l_info[DT_FINI_ARRAY]->d_un.d_ptr);
unsigned int sz = (imap->l_info[DT_FINI_ARRAYSZ]->d_un.d_val
/ sizeof (ElfW(Addr)));
- unsigned int cnt;
- for (cnt = 0; cnt < sz; ++cnt)
- ((fini_t) (imap->l_addr + array[cnt])) ();
+ while (sz-- > 0)
+ ((fini_t) array[sz]) ();
}
/* Next try the old-style destructor. */
diff --git a/elf/tls-macros.h b/elf/tls-macros.h
index 046a7d4c92..2de4b1a1af 100644
--- a/elf/tls-macros.h
+++ b/elf/tls-macros.h
@@ -298,6 +298,75 @@ register void *__gp __asm__("$29");
: "=r" (__l) : : "loc0", __TLS_CALL_CLOBBERS); \
__l; })
+#elif defined __sparc__ && !defined __arch64__
+
+# define TLS_LE(x) \
+ ({ int *__l; \
+ asm ("sethi %%tle_hix22(" #x "), %0" : "=r" (__l)); \
+ asm ("xor %1, %%tle_lox10(" #x "), %0" : "=r" (__l) : "r" (__l)); \
+ asm ("add %%g7, %1, %0" : "=r" (__l) : "r" (__l)); \
+ __l; })
+
+# ifdef __PIC__
+# define TLS_LOAD_PIC \
+ ({ register long pc __asm__ ("%o7"); \
+ long got; \
+ asm ("sethi %%hi(_GLOBAL_OFFSET_TABLE_-4), %1\n\t" \
+ "call .+8\n\t" \
+ "add %1, %%lo(_GLOBAL_OFFSET_TABLE_+4), %1\n\t" \
+ "add %1, %0, %1\n\t" \
+ : "=r" (pc), "=r" (got)); \
+ got; })
+# else
+# define TLS_LOAD_PIC \
+ ({ long got; \
+ asm (".hidden _GLOBAL_OFFSET_TABLE_\n\t" \
+ "sethi %%hi(_GLOBAL_OFFSET_TABLE_), %0\n\t" \
+ "or %0, %%lo(_GLOBAL_OFFSET_TABLE_), %0" \
+ : "=r" (got)); \
+ got; })
+# endif
+
+# define TLS_IE(x) \
+ ({ int *__l; \
+ asm ("sethi %%tie_hi22(" #x "), %0" : "=r" (__l)); \
+ asm ("add %1, %%tie_lo10(" #x "), %0" : "=r" (__l) : "r" (__l)); \
+ asm ("ld [%1 + %2], %0, %%tie_ld(" #x ")" \
+ : "=r" (__l) : "r" (TLS_LOAD_PIC), "r" (__l)); \
+ asm ("add %%g7, %1, %0, %%tie_add(" #x ")" : "=r" (__l) : "r" (__l)); \
+ __l; })
+
+# define TLS_LD(x) \
+ ({ int *__l; register void *__o0 asm ("%o0"); \
+ long __o; \
+ asm ("sethi %%tldm_hi22(" #x "), %0" : "=r" (__l)); \
+ asm ("add %1, %%tldm_lo10(" #x "), %0" : "=r" (__l) : "r" (__l)); \
+ asm ("add %1, %2, %0, %%tldm_add(" #x ")" \
+ : "=r" (__o0) : "r" (TLS_LOAD_PIC), "r" (__l)); \
+ asm ("call __tls_get_addr, %%tgd_call(" #x ")\n\t" \
+ " nop" \
+ : "=r" (__o0) : "0" (__o0) \
+ : "g1", "g2", "g3", "g4", "g5", "g6", "o1", "o2", "o3", "o4", \
+ "o5", "o7"); \
+ asm ("sethi %%tldo_hix22(" #x "), %0" : "=r" (__o)); \
+ asm ("xor %1, %%tldo_lox10(" #x "), %0" : "=r" (__o) : "r" (__o)); \
+ asm ("add %1, %2, %0, %%tldo_add(" #x ")" : "=r" (__l) \
+ : "r" (__o0), "r" (__o)); \
+ __l; })
+
+# define TLS_GD(x) \
+ ({ int *__l; register void *__o0 asm ("%o0"); \
+ asm ("sethi %%tgd_hi22(" #x "), %0" : "=r" (__l)); \
+ asm ("add %1, %%tgd_lo10(" #x "), %0" : "=r" (__l) : "r" (__l)); \
+ asm ("add %1, %2, %0, %%tgd_add(" #x ")" \
+ : "=r" (__o0) : "r" (TLS_LOAD_PIC), "r" (__l)); \
+ asm ("call __tls_get_addr, %%tgd_call(" #x ")\n\t" \
+ " nop" \
+ : "=r" (__o0) : "0" (__o0) \
+ : "g1", "g2", "g3", "g4", "g5", "g6", "o1", "o2", "o3", "o4", \
+ "o5", "o7"); \
+ __o0; })
+
#else
# error "No support for this architecture so far."
#endif
diff --git a/elf/tst-array4.c b/elf/tst-array4.c
new file mode 100644
index 0000000000..ac3d4eb716
--- /dev/null
+++ b/elf/tst-array4.c
@@ -0,0 +1,18 @@
+#include <dlfcn.h>
+
+#define main array1_main
+#include "tst-array1.c"
+#undef main
+
+int
+main (void)
+{
+ void *handle = dlopen ("tst-array2dep.so", RTLD_LAZY);
+
+ array1_main ();
+
+ if (handle != NULL)
+ dlclose (handle);
+
+ return 0;
+}
diff --git a/elf/tst-array4.exp b/elf/tst-array4.exp
new file mode 100644
index 0000000000..560444d2e8
--- /dev/null
+++ b/elf/tst-array4.exp
@@ -0,0 +1,19 @@
+preinit array 0
+preinit array 1
+preinit array 2
+init
+init array 0
+init array 1
+init array 2
+DSO init
+DSO init array 0
+DSO init array 1
+DSO init array 2
+DSO fini array 2
+DSO fini array 1
+DSO fini array 0
+DSO fini
+fini array 2
+fini array 1
+fini array 0
+fini
diff --git a/linuxthreads/ChangeLog b/linuxthreads/ChangeLog
index d81864b977..2949321c65 100644
--- a/linuxthreads/ChangeLog
+++ b/linuxthreads/ChangeLog
@@ -1,3 +1,19 @@
+2003-01-24 Jakub Jelinek <jakub@redhat.com>
+
+ * sysdeps/sparc/sparc32/pt-machine.h (__thread_self): Change to %g7,
+ as required by TLS ABI.
+ * sysdeps/sparc/sparc64/pt-machine.h (__thread_self): Likewise.
+ * sysdeps/sparc/tls.h [HAVE_TLS_SUPPORT] (USE_TLS, TLS_INIT_TCB_SIZE,
+ TLS_INIT_TCB_ALIGN, TLS_TCB_SIZE, TLS_TCB_ALIGN, TLS_TCB_AT_TP,
+ INSTALL_DTV, INSTALL_NEW_DTV, GET_DTV, TLS_INIT_TP, THREAD_DTV):
+ Define.
+ [HAVE_TLS_SUPPORT]: Include descr.h and sysdep.h.
+ * sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h: Use %g7
+ instead of %g6 for thread pointer.
+ * sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S: Likewise.
+ * sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h: Likewise.
+ * sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S: Likewise.
+
2003-01-25 Guido Guenther <agx@sigxcpu.org>
* sysdeps/unix/sysv/linux/mips/sysdep-cancel.h: New file.
diff --git a/linuxthreads/sysdeps/sparc/sparc32/pt-machine.h b/linuxthreads/sysdeps/sparc/sparc32/pt-machine.h
index 2e912332f5..cbfc872df2 100644
--- a/linuxthreads/sysdeps/sparc/sparc32/pt-machine.h
+++ b/linuxthreads/sysdeps/sparc/sparc32/pt-machine.h
@@ -1,6 +1,6 @@
/* Machine-dependent pthreads configuration and inline functions.
sparc version.
- Copyright (C) 1996,1997,1998,2000,2001,2002 Free Software Foundation, Inc.
+ Copyright (C) 1996-1998, 2000-2003 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Richard Henderson <rth@tamu.edu>.
@@ -53,10 +53,10 @@ testandset (int *spinlock)
register char *stack_pointer __asm__("%sp");
-/* Registers %g6 and %g7 are reserved by the ABI for "system use". It
- happens that Solaris uses %g6 for the thread pointer -- we do the same. */
+/* Registers %g6 and %g7 are reserved by the ABI for "system use".
+ %g7 is specified in the TLS ABI as thread pointer -- we do the same. */
struct _pthread_descr_struct;
-register struct _pthread_descr_struct *__thread_self __asm__("%g6");
+register struct _pthread_descr_struct *__thread_self __asm__("%g7");
/* Return the thread descriptor for the current thread. */
#define THREAD_SELF __thread_self
diff --git a/linuxthreads/sysdeps/sparc