2003-01-30  Jakub Jelinek  <jakub@redhat.com>

	* sysdeps/alpha/tls.h (THREAD_GETMEM, THREAD_GETMEM_NC,
	THREAD_SETMEM, THREAD_SETMEM_NC): Avoid warnings about unused self
	variable.
	* sysdeps/ia64/pt-machine.h (THREAD_GETMEM, THREAD_GETMEM_NC,
	THREAD_SETMEM, THREAD_SETMEM_NC): Likewise.
	* sysdeps/s390/s390-32/pt-machine.h (THREAD_GETMEM, THREAD_GETMEM_NC,
	THREAD_SETMEM, THREAD_SETMEM_NC): Likewise.
	* sysdeps/s390/s390-64/pt-machine.h (THREAD_GETMEM, THREAD_GETMEM_NC,
	THREAD_SETMEM, THREAD_SETMEM_NC): Likewise.
	* sysdeps/sh/pt-machine.h (THREAD_GETMEM, THREAD_GETMEM_NC,
	THREAD_SETMEM, THREAD_SETMEM_NC): Likewise.
	* sysdeps/sparc/sparc32/pt-machine.h (THREAD_GETMEM, THREAD_GETMEM_NC,
	THREAD_SETMEM, THREAD_SETMEM_NC): Likewise.
	* sysdeps/sparc/sparc64/pt-machine.h (THREAD_GETMEM, THREAD_GETMEM_NC,
	THREAD_SETMEM, THREAD_SETMEM_NC): Likewise.
This commit is contained in:
Ulrich Drepper 2003-01-30 18:04:01 +00:00
parent 5df8349b84
commit 567678b685
13 changed files with 107 additions and 50 deletions

View File

@ -39,9 +39,9 @@
/* We are trying to perform a static TLS relocation in MAP, but it was /* We are trying to perform a static TLS relocation in MAP, but it was
dynamically loaded. This can only work if there is enough surplus in dynamically loaded. This can only work if there is enough surplus in
the static TLS area already allocated for each running thread. If this the static TLS area already allocated for each running thread. If this
object's TLS segment is too big to fit, we return false. If it fits, object's TLS segment is too big to fit, we fail. If it fits,
we set MAP->l_tls_offset and return true. */ we set MAP->l_tls_offset and return. */
static bool static void __attribute_noinline__
allocate_static_tls (struct link_map *map) allocate_static_tls (struct link_map *map)
{ {
size_t offset = roundup (GL(dl_tls_static_used), map->l_tls_align); size_t offset = roundup (GL(dl_tls_static_used), map->l_tls_align);
@ -54,10 +54,13 @@ allocate_static_tls (struct link_map *map)
# error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined" # error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined"
# endif # endif
> GL(dl_tls_static_size)) > GL(dl_tls_static_size))
return false; {
const char *errstring = N_("\
shared object cannot be dlopen()ed: static TLS memory too small");
INTUSE(_dl_signal_error) (0, (map)->l_name, NULL, errstring);
}
map->l_tls_offset = offset; map->l_tls_offset = offset;
GL(dl_tls_static_used) = offset + map->l_tls_blocksize; GL(dl_tls_static_used) = offset + map->l_tls_blocksize;
return true;
} }
#endif #endif
@ -197,13 +200,8 @@ _dl_relocate_object (struct link_map *l, struct r_scope_elem *scope[],
intended to produce. */ intended to produce. */
#define CHECK_STATIC_TLS(map, sym_map) \ #define CHECK_STATIC_TLS(map, sym_map) \
do { \ do { \
if (__builtin_expect ((sym_map)->l_tls_offset == 0, 0) \ if (__builtin_expect ((sym_map)->l_tls_offset == 0, 0)) \
&& !allocate_static_tls (sym_map)) \ allocate_static_tls (sym_map); \
{ \
errstring = N_("\
shared object cannot be dlopen()ed: static TLS memory too small"); \
INTUSE(_dl_signal_error) (0, (map)->l_name, NULL, errstring); \
} \
} while (0) } while (0)
#include "dynamic-link.h" #include "dynamic-link.h"
@ -256,7 +254,7 @@ INTDEF (_dl_relocate_object)
void void
internal_function internal_function __attribute_noinline__
_dl_reloc_bad_type (struct link_map *map, unsigned int type, int plt) _dl_reloc_bad_type (struct link_map *map, unsigned int type, int plt)
{ {
extern const char INTUSE(_itoa_lower_digits)[] attribute_hidden; extern const char INTUSE(_itoa_lower_digits)[] attribute_hidden;

View File

@ -1,5 +1,5 @@
/* Do relocations for ELF dynamic linking. /* Do relocations for ELF dynamic linking.
Copyright (C) 1995,96,97,98,99,2000,2001,2002 Free Software Foundation, Inc. Copyright (C) 1995-2002, 2003 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -49,7 +49,7 @@
relocations; they should be set up to call _dl_runtime_resolve, rather relocations; they should be set up to call _dl_runtime_resolve, rather
than fully resolved now. */ than fully resolved now. */
static inline void static inline void __attribute__ ((always_inline))
elf_dynamic_do_rel (struct link_map *map, elf_dynamic_do_rel (struct link_map *map,
ElfW(Addr) reladdr, ElfW(Addr) relsize, ElfW(Addr) reladdr, ElfW(Addr) relsize,
int lazy) int lazy)

View File

@ -1,5 +1,5 @@
/* Inline functions for dynamic linking. /* Inline functions for dynamic linking.
Copyright (C) 1995,96,97,98,99,2000,2001,2002 Free Software Foundation, Inc. Copyright (C) 1995-2002, 2003 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -18,9 +18,36 @@
02111-1307 USA. */ 02111-1307 USA. */
#include <elf.h> #include <elf.h>
#include <dl-machine.h>
#include <assert.h> #include <assert.h>
#ifdef RESOLVE
auto void __attribute__((always_inline))
elf_machine_rel (struct link_map *map, const ElfW(Rel) *reloc,
const ElfW(Sym) *sym, const struct r_found_version *version,
ElfW(Addr) *const reloc_addr);
auto void __attribute__((always_inline))
elf_machine_rela (struct link_map *map, const ElfW(Rela) *reloc,
const ElfW(Sym) *sym, const struct r_found_version *version,
ElfW(Addr) *const reloc_addr);
auto void __attribute__((always_inline))
elf_machine_rel_relative (ElfW(Addr) l_addr, const ElfW(Rel) *reloc,
ElfW(Addr) *const reloc_addr);
auto void __attribute__((always_inline))
elf_machine_rela_relative (ElfW(Addr) l_addr, const ElfW(Rela) *reloc,
ElfW(Addr) *const reloc_addr);
# if ELF_MACHINE_NO_RELA || defined ELF_MACHINE_PLT_REL
auto void __attribute__((always_inline))
elf_machine_lazy_rel (struct link_map *map,
ElfW(Addr) l_addr, const ElfW(Rel) *reloc);
# else
auto void __attribute__((always_inline))
elf_machine_lazy_rel (struct link_map *map,
ElfW(Addr) l_addr, const ElfW(Rela) *reloc);
# endif
#endif
#include <dl-machine.h>
#ifndef VERSYMIDX #ifndef VERSYMIDX
# define VERSYMIDX(sym) (DT_NUM + DT_THISPROCNUM + DT_VERSIONTAGIDX (sym)) # define VERSYMIDX(sym) (DT_NUM + DT_THISPROCNUM + DT_VERSIONTAGIDX (sym))
#endif #endif

View File

@ -1,3 +1,21 @@
2003-01-30 Jakub Jelinek <jakub@redhat.com>
* sysdeps/alpha/tls.h (THREAD_GETMEM, THREAD_GETMEM_NC,
THREAD_SETMEM, THREAD_SETMEM_NC): Avoid warnings about unused self
variable.
* sysdeps/ia64/pt-machine.h (THREAD_GETMEM, THREAD_GETMEM_NC,
THREAD_SETMEM, THREAD_SETMEM_NC): Likewise.
* sysdeps/s390/s390-32/pt-machine.h (THREAD_GETMEM, THREAD_GETMEM_NC,
THREAD_SETMEM, THREAD_SETMEM_NC): Likewise.
* sysdeps/s390/s390-64/pt-machine.h (THREAD_GETMEM, THREAD_GETMEM_NC,
THREAD_SETMEM, THREAD_SETMEM_NC): Likewise.
* sysdeps/sh/pt-machine.h (THREAD_GETMEM, THREAD_GETMEM_NC,
THREAD_SETMEM, THREAD_SETMEM_NC): Likewise.
* sysdeps/sparc/sparc32/pt-machine.h (THREAD_GETMEM, THREAD_GETMEM_NC,
THREAD_SETMEM, THREAD_SETMEM_NC): Likewise.
* sysdeps/sparc/sparc64/pt-machine.h (THREAD_GETMEM, THREAD_GETMEM_NC,
THREAD_SETMEM, THREAD_SETMEM_NC): Likewise.
2003-01-27 Martin Schwidefsky <schwidefsky@de.ibm.com> 2003-01-27 Martin Schwidefsky <schwidefsky@de.ibm.com>
* sysdeps/s390/s390-32/pt-machine.h (THREAD_SELF, INIT_THREAD_SELF): * sysdeps/s390/s390-32/pt-machine.h (THREAD_SELF, INIT_THREAD_SELF):

View File

@ -114,10 +114,12 @@ typedef struct
the compiler does its job and unifies the multiple the compiler does its job and unifies the multiple
__builtin_thread_pointer instances. */ __builtin_thread_pointer instances. */
#define THREAD_GETMEM(descr, member) THREAD_SELF->member #define THREAD_GETMEM(descr, member) (sizeof (descr), THREAD_SELF->member)
#define THREAD_GETMEM_NC(descr, member) THREAD_SELF->member #define THREAD_GETMEM_NC(descr, member) (sizeof (descr), THREAD_SELF->member)
#define THREAD_SETMEM(descr, member, value) (THREAD_SELF->member = (value)) #define THREAD_SETMEM(descr, member, value) \
#define THREAD_SETMEM_NC(descr, member, value) (THREAD_SELF->member = (value)) (sizeof (descr), THREAD_SELF->member = (value))
#define THREAD_SETMEM_NC(descr, member, value) \
(sizeof (descr), THREAD_SELF->member = (value))
# endif /* HAVE_TLS_SUPPORT */ # endif /* HAVE_TLS_SUPPORT */
#endif /* __ASSEMBLER__ */ #endif /* __ASSEMBLER__ */

View File

@ -64,10 +64,12 @@ register struct _pthread_descr_struct *__thread_self __asm__("r13");
/* Access to data in the thread descriptor is easy. */ /* Access to data in the thread descriptor is easy. */
#define THREAD_GETMEM(descr, member) THREAD_SELF->member #define THREAD_GETMEM(descr, member) (sizeof (descr), THREAD_SELF->member)
#define THREAD_GETMEM_NC(descr, member) THREAD_SELF->member #define THREAD_GETMEM_NC(descr, member) (sizeof (descr), THREAD_SELF->member)
#define THREAD_SETMEM(descr, member, value) THREAD_SELF->member = (value) #define THREAD_SETMEM(descr, member, value) \
#define THREAD_SETMEM_NC(descr, member, value) THREAD_SELF->member = (value) (sizeof (descr), THREAD_SELF->member = (value))
#define THREAD_SETMEM_NC(descr, member, value) \
(sizeof (descr), THREAD_SELF->member = (value))
/* Memory barrier */ /* Memory barrier */

View File

@ -80,10 +80,12 @@ register char * stack_pointer __asm__ ("15");
#endif #endif
/* Access to data in the thread descriptor is easy. */ /* Access to data in the thread descriptor is easy. */
#define THREAD_GETMEM(descr, member) THREAD_SELF->member #define THREAD_GETMEM(descr, member) (sizeof (descr), THREAD_SELF->member)
#define THREAD_GETMEM_NC(descr, member) THREAD_SELF->member #define THREAD_GETMEM_NC(descr, member) (sizeof (descr), THREAD_SELF->member)
#define THREAD_SETMEM(descr, member, value) THREAD_SELF->member = (value) #define THREAD_SETMEM(descr, member, value) \
#define THREAD_SETMEM_NC(descr, member, value) THREAD_SELF->member = (value) (sizeof (descr), THREAD_SELF->member = (value))
#define THREAD_SETMEM_NC(descr, member, value) \
(sizeof (descr), THREAD_SELF->member = (value))
/* We want the OS to assign stack addresses. */ /* We want the OS to assign stack addresses. */
#define FLOATING_STACKS 1 #define FLOATING_STACKS 1

View File

@ -86,10 +86,12 @@ register char * stack_pointer __asm__ ("15");
#endif #endif
/* Access to data in the thread descriptor is easy. */ /* Access to data in the thread descriptor is easy. */
#define THREAD_GETMEM(descr, member) THREAD_SELF->member #define THREAD_GETMEM(descr, member) (sizeof (descr), THREAD_SELF->member)
#define THREAD_GETMEM_NC(descr, member) THREAD_SELF->member #define THREAD_GETMEM_NC(descr, member) (sizeof (descr), THREAD_SELF->member)
#define THREAD_SETMEM(descr, member, value) THREAD_SELF->member = (value) #define THREAD_SETMEM(descr, member, value) \
#define THREAD_SETMEM_NC(descr, member, value) THREAD_SELF->member = (value) (sizeof (descr), THREAD_SELF->member = (value))
#define THREAD_SETMEM_NC(descr, member, value) \
(sizeof (descr), THREAD_SELF->member = (value))
/* We want the OS to assign stack addresses. */ /* We want the OS to assign stack addresses. */
#define FLOATING_STACKS 1 #define FLOATING_STACKS 1

View File

@ -1,6 +1,6 @@
/* Machine-dependent pthreads configuration and inline functions. /* Machine-dependent pthreads configuration and inline functions.
SuperH version. SuperH version.
Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Niibe Yutaka <gniibe@m17n.org>. Contributed by Niibe Yutaka <gniibe@m17n.org>.
@ -68,10 +68,12 @@ struct _pthread_descr_struct;
({ __asm__ __volatile__("ldc %0,gbr" : : "r" (descr));}) ({ __asm__ __volatile__("ldc %0,gbr" : : "r" (descr));})
/* Access to data in the thread descriptor is easy. */ /* Access to data in the thread descriptor is easy. */
#define THREAD_GETMEM(descr, member) THREAD_SELF->member #define THREAD_GETMEM(descr, member) (sizeof (descr), THREAD_SELF->member)
#define THREAD_GETMEM_NC(descr, member) THREAD_SELF->member #define THREAD_GETMEM_NC(descr, member) (sizeof (descr), THREAD_SELF->member)
#define THREAD_SETMEM(descr, member, value) THREAD_SELF->member = (value) #define THREAD_SETMEM(descr, member, value) \
#define THREAD_SETMEM_NC(descr, member, value) THREAD_SELF->member = (value) (sizeof (descr), THREAD_SELF->member = (value))
#define THREAD_SETMEM_NC(descr, member, value) \
(sizeof (descr), THREAD_SELF->member = (value))
#endif /* __ASSEMBLER__ */ #endif /* __ASSEMBLER__ */
#endif /* pt-machine.h */ #endif /* pt-machine.h */

View File

@ -65,10 +65,12 @@ register struct _pthread_descr_struct *__thread_self __asm__("%g7");
#define INIT_THREAD_SELF(descr, nr) (__thread_self = (descr)) #define INIT_THREAD_SELF(descr, nr) (__thread_self = (descr))
/* Access to data in the thread descriptor is easy. */ /* Access to data in the thread descriptor is easy. */
#define THREAD_GETMEM(descr, member) __thread_self->member #define THREAD_GETMEM(descr, member) (sizeof (descr), THREAD_SELF->member)
#define THREAD_GETMEM_NC(descr, member) __thread_self->member #define THREAD_GETMEM_NC(descr, member) (sizeof (descr), THREAD_SELF->member)
#define THREAD_SETMEM(descr, member, value) __thread_self->member = (value) #define THREAD_SETMEM(descr, member, value) \
#define THREAD_SETMEM_NC(descr, member, value) __thread_self->member = (value) (sizeof (descr), THREAD_SELF->member = (value))
#define THREAD_SETMEM_NC(descr, member, value) \
(sizeof (descr), THREAD_SELF->member = (value))
/* We want the OS to assign stack addresses. */ /* We want the OS to assign stack addresses. */
#define FLOATING_STACKS 1 #define FLOATING_STACKS 1

View File

@ -87,10 +87,12 @@ __compare_and_swap (long int *p, long int oldval, long int newval)
} }
/* Access to data in the thread descriptor is easy. */ /* Access to data in the thread descriptor is easy. */
#define THREAD_GETMEM(descr, member) __thread_self->member #define THREAD_GETMEM(descr, member) (sizeof (descr), THREAD_SELF->member)
#define THREAD_GETMEM_NC(descr, member) __thread_self->member #define THREAD_GETMEM_NC(descr, member) (sizeof (descr), THREAD_SELF->member)
#define THREAD_SETMEM(descr, member, value) __thread_self->member = (value) #define THREAD_SETMEM(descr, member, value) \
#define THREAD_SETMEM_NC(descr, member, value) __thread_self->member = (value) (sizeof (descr), THREAD_SELF->member = (value))
#define THREAD_SETMEM_NC(descr, member, value) \
(sizeof (descr), THREAD_SELF->member = (value))
/* We want the OS to assign stack addresses. */ /* We want the OS to assign stack addresses. */
#define FLOATING_STACKS 1 #define FLOATING_STACKS 1

View File

@ -42,10 +42,10 @@ ENTRY(__clone)
l %r5,100(%r15) /* load child_tid from stack */ l %r5,100(%r15) /* load child_tid from stack */
l %r6,96(%r15) /* load tls from stack */ l %r6,96(%r15) /* load tls from stack */
svc SYS_ify(clone) svc SYS_ify(clone)
l %r6,24(%r15) /* restore %r6 */
ltr %r2,%r2 /* check return code */ ltr %r2,%r2 /* check return code */
jm SYSCALL_ERROR_LABEL
jz thread_start jz thread_start
l %r6,24(%r15) /* restore %r6 */
jm SYSCALL_ERROR_LABEL
br %r14 br %r14
error: error:
lhi %r2,-EINVAL lhi %r2,-EINVAL

View File

@ -43,10 +43,10 @@ ENTRY(__clone)
lg %r5,168(%r15) /* load child_tid from stack */ lg %r5,168(%r15) /* load child_tid from stack */
l %r6,160(%r15) /* load tls from stack */ l %r6,160(%r15) /* load tls from stack */
svc SYS_ify(clone) svc SYS_ify(clone)
lg %r6,48(%r15) /* restore %r6 */
ltgr %r2,%r2 /* check return code */ ltgr %r2,%r2 /* check return code */
jgm SYSCALL_ERROR_LABEL
jz thread_start jz thread_start
lg %r6,48(%r15) /* restore %r6 */
jgm SYSCALL_ERROR_LABEL
br %r14 br %r14
error: error:
lghi %r2,-EINVAL lghi %r2,-EINVAL