mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-28 00:21:52 +03:00
* elf/dl-deps.c (_dl_map_object_deps): Start TAILP at last preload.
* elf/dl-open.c (_dl_open): Force an indirect call for _dl_relocate_object so there is no chance a PLT fixup will be done and clobber _dl_global_scope before our call happens. * sysdeps/i386/fpu/__math.h (tan): Correct output constraint from =u to =t; must operate on top of fp reg stack, not second from top. Correct input constraint to 0 from t; must be explicit when input and output are the same register. (floor): Use __volatile instead of volatile. (ceil): Likewise. * manual/Makefile ($(objpfx)stamp%-$(subdir)): Separate rule from other targets.
This commit is contained in:
@ -52,8 +52,16 @@ _dl_open (const char *file, int mode)
|
||||
{
|
||||
if (! l->l_relocated)
|
||||
{
|
||||
_dl_relocate_object (l, _dl_object_relocation_scope (l),
|
||||
(mode & RTLD_BINDING_MASK) == RTLD_LAZY);
|
||||
/* We use an indirect call call for _dl_relocate_object because
|
||||
we must avoid using the PLT in the call. If our PLT entry for
|
||||
_dl_relocate_object hasn't been used yet, then the dynamic
|
||||
linker fixup routine will clobber _dl_global_scope during its
|
||||
work. We must be sure that nothing will require a PLT fixup
|
||||
between when _dl_object_relocation_scope returns and when we
|
||||
enter the dynamic linker's code (_dl_relocate_object). */
|
||||
__typeof (_dl_relocate_object) *reloc = &_dl_relocate_object;
|
||||
(*reloc) (l, _dl_object_relocation_scope (l),
|
||||
(mode & RTLD_BINDING_MASK) == RTLD_LAZY);
|
||||
*_dl_global_scope_end = NULL;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user