libc dl_iterate_phdr(): dlpi_tls_data is wrong
This is the same change as d36d681615
, but for libc static implementaion
of dl_iterate_phdr().
Reported by: emacsray@gmail.com
PR: 254774
Sponsored by: The FreeBSD Foundation
MFC after: 1 week
Differential revision: https://reviews.freebsd.org/D29623
This commit is contained in:
parent
ca46b5698e
commit
dbd2053026
@ -196,8 +196,6 @@ dl_init_phdr_info(void)
|
||||
for (i = 0; i < phdr_info.dlpi_phnum; i++) {
|
||||
if (phdr_info.dlpi_phdr[i].p_type == PT_TLS) {
|
||||
phdr_info.dlpi_tls_modid = 1;
|
||||
phdr_info.dlpi_tls_data =
|
||||
(void*)phdr_info.dlpi_phdr[i].p_vaddr;
|
||||
}
|
||||
}
|
||||
phdr_info.dlpi_adds = 1;
|
||||
@ -210,13 +208,17 @@ dl_iterate_phdr(int (*callback)(struct dl_phdr_info *, size_t, void *) __unused,
|
||||
void *data __unused)
|
||||
{
|
||||
#ifndef IN_LIBDL
|
||||
tls_index ti;
|
||||
int ret;
|
||||
|
||||
__init_elf_aux_vector();
|
||||
if (__elf_aux_vector == NULL)
|
||||
return (1);
|
||||
_once(&dl_phdr_info_once, dl_init_phdr_info);
|
||||
ti.ti_module = 1;
|
||||
ti.ti_offset = 0;
|
||||
mutex_lock(&dl_phdr_info_lock);
|
||||
phdr_info.dlpi_tls_data = __tls_get_addr(&ti);
|
||||
ret = callback(&phdr_info, sizeof(phdr_info), data);
|
||||
mutex_unlock(&dl_phdr_info_lock);
|
||||
return (ret);
|
||||
|
Loading…
Reference in New Issue
Block a user