* sysdeps/generic/ldsodefs.h (struct rtld_global_ro): Add
_dl_tls_get_addr_soft element. * elf/rtld.c (rtld_global_ro): Initialize _dl_tls_get_addr_soft. * elf/Versions (ld): Don't export _dl_tls_get_addr_soft. * dlfcn/dlinfo.c (dlinfo_doit): Access dl_tls_get_addr_soft through GLRO. * elf/dl-iteratephdr.c (__dl_iterate_phdr): Likewise. * elf/dl-tls.c (_dl_tls_get_addr_soft): Use attribute_hidden instead of internal_function.
This commit is contained in:
parent
c71665ad06
commit
93025f9373
10
ChangeLog
10
ChangeLog
@ -1,5 +1,15 @@
|
|||||||
2008-03-07 Ulrich Drepper <drepper@redhat.com>
|
2008-03-07 Ulrich Drepper <drepper@redhat.com>
|
||||||
|
|
||||||
|
* sysdeps/generic/ldsodefs.h (struct rtld_global_ro): Add
|
||||||
|
_dl_tls_get_addr_soft element.
|
||||||
|
* elf/rtld.c (rtld_global_ro): Initialize _dl_tls_get_addr_soft.
|
||||||
|
* elf/Versions (ld): Don't export _dl_tls_get_addr_soft.
|
||||||
|
* dlfcn/dlinfo.c (dlinfo_doit): Access dl_tls_get_addr_soft through
|
||||||
|
GLRO.
|
||||||
|
* elf/dl-iteratephdr.c (__dl_iterate_phdr): Likewise.
|
||||||
|
* elf/dl-tls.c (_dl_tls_get_addr_soft): Use attribute_hidden instead
|
||||||
|
of internal_function.
|
||||||
|
|
||||||
* stdlib/Makefile (aux): Add tens_in_limb.
|
* stdlib/Makefile (aux): Add tens_in_limb.
|
||||||
* stdlib/strtod_l.c: Move _tens_in_limb definition to...
|
* stdlib/strtod_l.c: Move _tens_in_limb definition to...
|
||||||
* stdlib/tens_in_limb.c: ...here. New file.
|
* stdlib/tens_in_limb.c: ...here. New file.
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* dlinfo -- Get information from the dynamic linker.
|
/* dlinfo -- Get information from the dynamic linker.
|
||||||
Copyright (C) 2003, 2004, 2006, 2007 Free Software Foundation, Inc.
|
Copyright (C) 2003, 2004, 2006, 2007, 2008 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
|
||||||
@ -101,7 +101,7 @@ RTLD_SELF used in code not dynamically loaded"));
|
|||||||
{
|
{
|
||||||
void *data = NULL;
|
void *data = NULL;
|
||||||
if (l->l_tls_modid != 0)
|
if (l->l_tls_modid != 0)
|
||||||
data = _dl_tls_get_addr_soft (l);
|
data = GLRO(dl_tls_get_addr_soft) (l);
|
||||||
*(void **) args->arg = data;
|
*(void **) args->arg = data;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -57,7 +57,6 @@ ld {
|
|||||||
_dl_allocate_tls; _dl_deallocate_tls;
|
_dl_allocate_tls; _dl_deallocate_tls;
|
||||||
_dl_get_tls_static_info; _dl_allocate_tls_init;
|
_dl_get_tls_static_info; _dl_allocate_tls_init;
|
||||||
_dl_tls_setup; _dl_rtld_di_serinfo;
|
_dl_tls_setup; _dl_rtld_di_serinfo;
|
||||||
_dl_tls_get_addr_soft;
|
|
||||||
_dl_make_stack_executable;
|
_dl_make_stack_executable;
|
||||||
# Only here for gdb while a better method is developed.
|
# Only here for gdb while a better method is developed.
|
||||||
_dl_debug_state;
|
_dl_debug_state;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Get loaded objects program headers.
|
/* Get loaded objects program headers.
|
||||||
Copyright (C) 2001,2002,2003,2004,2006,2007 Free Software Foundation, Inc.
|
Copyright (C) 2001-2004,2006,2007,2008 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Jakub Jelinek <jakub@redhat.com>, 2001.
|
Contributed by Jakub Jelinek <jakub@redhat.com>, 2001.
|
||||||
|
|
||||||
@ -72,7 +72,7 @@ __dl_iterate_phdr (int (*callback) (struct dl_phdr_info *info,
|
|||||||
info.dlpi_tls_data = NULL;
|
info.dlpi_tls_data = NULL;
|
||||||
info.dlpi_tls_modid = l->l_tls_modid;
|
info.dlpi_tls_modid = l->l_tls_modid;
|
||||||
if (info.dlpi_tls_modid != 0)
|
if (info.dlpi_tls_modid != 0)
|
||||||
info.dlpi_tls_data = _dl_tls_get_addr_soft (l);
|
info.dlpi_tls_data = GLRO(dl_tls_get_addr_soft) (l);
|
||||||
ret = callback (&info, sizeof (struct dl_phdr_info), data);
|
ret = callback (&info, sizeof (struct dl_phdr_info), data);
|
||||||
if (ret)
|
if (ret)
|
||||||
break;
|
break;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Thread-local storage handling in the ELF dynamic linker. Generic version.
|
/* Thread-local storage handling in the ELF dynamic linker. Generic version.
|
||||||
Copyright (C) 2002,2003,2004,2005,2006 Free Software Foundation, Inc.
|
Copyright (C) 2002,2003,2004,2005,2006,2008 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
|
||||||
@ -758,7 +758,7 @@ __tls_get_addr (GET_ADDR_ARGS)
|
|||||||
/* Look up the module's TLS block as for __tls_get_addr,
|
/* Look up the module's TLS block as for __tls_get_addr,
|
||||||
but never touch anything. Return null if it's not allocated yet. */
|
but never touch anything. Return null if it's not allocated yet. */
|
||||||
void *
|
void *
|
||||||
internal_function
|
attribute_hidden
|
||||||
_dl_tls_get_addr_soft (struct link_map *l)
|
_dl_tls_get_addr_soft (struct link_map *l)
|
||||||
{
|
{
|
||||||
if (__builtin_expect (l->l_tls_modid == 0, 0))
|
if (__builtin_expect (l->l_tls_modid == 0, 0))
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Run time dynamic linker.
|
/* Run time dynamic linker.
|
||||||
Copyright (C) 1995-2006, 2007 Free Software Foundation, Inc.
|
Copyright (C) 1995-2006, 2007, 2008 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
|
||||||
@ -161,7 +161,8 @@ struct rtld_global_ro _rtld_global_ro attribute_relro =
|
|||||||
._dl_lookup_symbol_x = _dl_lookup_symbol_x,
|
._dl_lookup_symbol_x = _dl_lookup_symbol_x,
|
||||||
._dl_check_caller = _dl_check_caller,
|
._dl_check_caller = _dl_check_caller,
|
||||||
._dl_open = _dl_open,
|
._dl_open = _dl_open,
|
||||||
._dl_close = _dl_close
|
._dl_close = _dl_close,
|
||||||
|
._dl_tls_get_addr_soft = _dl_tls_get_addr_soft
|
||||||
};
|
};
|
||||||
/* If we would use strong_alias here the compiler would see a
|
/* If we would use strong_alias here the compiler would see a
|
||||||
non-hidden definition. This would undo the effect of the previous
|
non-hidden definition. This would undo the effect of the previous
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Run-time dynamic linker data structures for loaded ELF shared objects.
|
/* Run-time dynamic linker data structures for loaded ELF shared objects.
|
||||||
Copyright (C) 1995-2006, 2007 Free Software Foundation, Inc.
|
Copyright (C) 1995-2006, 2007, 2008 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
|
||||||
@ -655,6 +655,7 @@ struct rtld_global_ro
|
|||||||
void *(*_dl_open) (const char *file, int mode, const void *caller_dlopen,
|
void *(*_dl_open) (const char *file, int mode, const void *caller_dlopen,
|
||||||
Lmid_t nsid, int argc, char *argv[], char *env[]);
|
Lmid_t nsid, int argc, char *argv[], char *env[]);
|
||||||
void (*_dl_close) (void *map);
|
void (*_dl_close) (void *map);
|
||||||
|
void *(*_dl_tls_get_addr_soft) (struct link_map *);
|
||||||
|
|
||||||
/* List of auditing interfaces. */
|
/* List of auditing interfaces. */
|
||||||
struct audit_ifaces *_dl_audit;
|
struct audit_ifaces *_dl_audit;
|
||||||
@ -1069,7 +1070,7 @@ extern struct link_map *_dl_update_slotinfo (unsigned long int req_modid);
|
|||||||
|
|
||||||
/* Look up the module's TLS block as for __tls_get_addr,
|
/* Look up the module's TLS block as for __tls_get_addr,
|
||||||
but never touch anything. Return null if it's not allocated yet. */
|
but never touch anything. Return null if it's not allocated yet. */
|
||||||
extern void *_dl_tls_get_addr_soft (struct link_map *l) internal_function;
|
extern void *_dl_tls_get_addr_soft (struct link_map *l) attribute_hidden;
|
||||||
|
|
||||||
extern int _dl_addr_inside_object (struct link_map *l, const ElfW(Addr) addr)
|
extern int _dl_addr_inside_object (struct link_map *l, const ElfW(Addr) addr)
|
||||||
internal_function attribute_hidden;
|
internal_function attribute_hidden;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user