Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Update.
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>.
  • Loading branch information
Ulrich Drepper committed Jan 27, 2003
1 parent e4e9446 commit 62f29da
Show file tree
Hide file tree
Showing 49 changed files with 893 additions and 385 deletions.
77 changes: 77 additions & 0 deletions 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
Expand Down
8 changes: 7 additions & 1 deletion elf/Makefile
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
5 changes: 2 additions & 3 deletions elf/dl-close.c
Expand Up @@ -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. */
Expand Down
69 changes: 69 additions & 0 deletions elf/tls-macros.h
Expand Up @@ -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
18 changes: 18 additions & 0 deletions 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;
}
19 changes: 19 additions & 0 deletions 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
16 changes: 16 additions & 0 deletions 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.
Expand Down
8 changes: 4 additions & 4 deletions 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>.
Expand Down Expand Up @@ -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
Expand Down
8 changes: 4 additions & 4 deletions linuxthreads/sysdeps/sparc/sparc64/pt-machine.h
@@ -1,6 +1,6 @@
/* Machine-dependent pthreads configuration and inline functions.
Sparc v9 version.
Copyright (C) 1997,1998,1999,2000,2001,2002 Free Software Foundation, Inc.
Copyright (C) 1997-2002, 2003 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Richard Henderson <rth@tamu.edu>.
Expand Down Expand Up @@ -59,10 +59,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". The
TLS ABI specifies %g7 as the thread pointer. */
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
Expand Down
53 changes: 50 additions & 3 deletions linuxthreads/sysdeps/sparc/tls.h
@@ -1,5 +1,5 @@
/* Definitions for thread-local data handling. linuxthreads/sparc version.
Copyright (C) 2002 Free Software Foundation, Inc.
Copyright (C) 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
Expand Down Expand Up @@ -45,9 +45,56 @@ typedef struct
# include <tcb-offsets.h>
#endif /* __ASSEMBLER__ */

#undef USE_TLS
#ifdef HAVE_TLS_SUPPORT

#if USE_TLS
/* Signal that TLS support is available. */
# define USE_TLS 1

# ifndef __ASSEMBLER__
/* Get system call information. */
# include <sysdep.h>

/* Get the thread descriptor definition. */
# include <linuxthreads/descr.h>

/* This is the size of the initial TCB. */
# define TLS_INIT_TCB_SIZE sizeof (tcbhead_t)

/* Alignment requirements for the initial TCB. */
# define TLS_INIT_TCB_ALIGN __alignof__ (tcbhead_t)

/* This is the size of the TCB. */
# define TLS_TCB_SIZE sizeof (struct _pthread_descr_struct)

/* Alignment requirements for the TCB. */
# define TLS_TCB_ALIGN __alignof__ (struct _pthread_descr_struct)

/* The TCB can have any size and the memory following the address the
thread pointer points to is unspecified. Allocate the TCB there. */
# define TLS_TCB_AT_TP 1

/* Install the dtv pointer. The pointer passed is to the element with
index -1 which contain the length. */
# define INSTALL_DTV(descr, dtvp) \
((tcbhead_t *) (descr))->dtv = (dtvp) + 1

/* Install new dtv for current thread. */
# define INSTALL_NEW_DTV(DTV) \
(((tcbhead_t *) __thread_self)->dtv = (DTV))

/* Return dtv of given thread descriptor. */
# define GET_DTV(descr) \
(((tcbhead_t *) (descr))->dtv)

/* Code to initially initialize the thread pointer. */
# define TLS_INIT_TP(descr, secondcall) \
(__thread_self = (__typeof (__thread_self)) (descr), NULL)

/* Return the address of the dtv for the current thread. */
# define THREAD_DTV() \
(((tcbhead_t *) __thread_self)->dtv)

# endif

#else

Expand Down
@@ -1,4 +1,4 @@
/* Copyright (C) 2002 Free Software Foundation, Inc.
/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Jakub Jelinek <jakub@redhat.com>, 2002.
Expand Down Expand Up @@ -29,7 +29,7 @@
# define PSEUDO(name, syscall_name, args) \
.text; \
ENTRY(name) \
ld [%g6 + MULTIPLE_THREADS_OFFSET], %g1; \
ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1; \
cmp %g1, 0; \
bne 1f; \
mov SYS_ify(syscall_name), %g1; \
Expand Down Expand Up @@ -86,7 +86,7 @@ SYSCALL_ERROR_HANDLER_ENTRY(__syscall_error_handler2) \
__builtin_expect (THREAD_GETMEM (THREAD_SELF, \
p_header.data.multiple_threads) == 0, 1)
# else
# define SINGLE_THREAD_P ld [%g6 + MULTIPLE_THREADS_OFFSET], %g1
# define SINGLE_THREAD_P ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1
# endif

#elif !defined __ASSEMBLER__
Expand Down
2 changes: 1 addition & 1 deletion linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S
Expand Up @@ -21,7 +21,7 @@

.text
ENTRY(__vfork)
ld [%g6 + MULTIPLE_THREADS_OFFSET], %o0
ld [%g7 + MULTIPLE_THREADS_OFFSET], %o0
cmp %o0, 0
#ifdef SHARED
bne HIDDEN_JUMPTARGET(__fork)
Expand Down

0 comments on commit 62f29da

Please sign in to comment.