Remove rtld use of libc amd64_set_fsbase().
One less non-trivial dependency of rtld on libc. Also, amd64_set_fsbase() is to be converted to ifunc, which I do not want to support inside rtld. Sponsored by: The FreeBSD Foundation MFC after: 1 week
This commit is contained in:
parent
29ea8142f8
commit
ca2b9726c3
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=339897
@ -35,8 +35,9 @@
|
|||||||
|
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
#include <machine/sysarch.h>
|
|
||||||
#include <machine/cpufunc.h>
|
#include <machine/cpufunc.h>
|
||||||
|
#include <machine/specialreg.h>
|
||||||
|
#include <machine/sysarch.h>
|
||||||
|
|
||||||
#include <dlfcn.h>
|
#include <dlfcn.h>
|
||||||
#include <err.h>
|
#include <err.h>
|
||||||
@ -495,17 +496,26 @@ pre_init(void)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int __getosreldate(void);
|
||||||
|
|
||||||
void
|
void
|
||||||
allocate_initial_tls(Obj_Entry *objs)
|
allocate_initial_tls(Obj_Entry *objs)
|
||||||
{
|
{
|
||||||
/*
|
void *addr;
|
||||||
* Fix the size of the static TLS block by using the maximum
|
|
||||||
* offset allocated so far and adding a bit for dynamic modules to
|
/*
|
||||||
* use.
|
* Fix the size of the static TLS block by using the maximum
|
||||||
*/
|
* offset allocated so far and adding a bit for dynamic
|
||||||
tls_static_space = tls_last_offset + RTLD_STATIC_TLS_EXTRA;
|
* modules to use.
|
||||||
amd64_set_fsbase(allocate_tls(objs, 0,
|
*/
|
||||||
3*sizeof(Elf_Addr), sizeof(Elf_Addr)));
|
tls_static_space = tls_last_offset + RTLD_STATIC_TLS_EXTRA;
|
||||||
|
|
||||||
|
addr = allocate_tls(objs, 0, 3 * sizeof(Elf_Addr), sizeof(Elf_Addr));
|
||||||
|
if (__getosreldate() >= P_OSREL_WRFSBASE &&
|
||||||
|
(cpu_stdext_feature & CPUID_STDEXT_FSGSBASE) != 0)
|
||||||
|
wrfsbase((uintptr_t)addr);
|
||||||
|
else
|
||||||
|
sysarch(AMD64_SET_FSBASE, &addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void *__tls_get_addr(tls_index *ti)
|
void *__tls_get_addr(tls_index *ti)
|
||||||
|
Loading…
Reference in New Issue
Block a user