mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-05 21:00:05 +00:00
Update.
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:
parent
5df8349b84
commit
567678b685
@ -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;
|
||||||
|
@ -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)
|
||||||
|
@ -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
|
||||||
|
@ -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):
|
||||||
|
@ -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__ */
|
||||||
|
@ -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 */
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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 */
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user