glibc/sysdeps/mach/hurd/i386
Florian Weimer ec935dea63 elf: Implement __libc_early_init
This function is defined in libc.so, and the dynamic loader calls
right after relocation has been finished, before any ELF constructors
or the preinit function is invoked.  It is also used in the static
build for initializing parts of the static libc.

To locate __libc_early_init, a direct symbol lookup function is used,
_dl_lookup_direct.  It does not search the entire symbol scope and
consults merely a single link map.  This function could also be used
to implement lookups in the vDSO (as an optimization).

A per-namespace variable (libc_map) is added for locating libc.so,
to avoid repeated traversals of the search scope.  It is similar to
GL(dl_initfirst).  An alternative would have been to thread a context
argument from _dl_open down to _dl_map_object_from_fd (where libc.so
is identified).  This could have avoided the global variable, but
the change would be larger as a result.  It would not have been
possible to use this to replace GL(dl_initfirst) because that global
variable is used to pass the function pointer past the stack switch
from dl_main to the main program.  Replacing that requires adding
a new argument to _dl_init, which in turn needs changes to the
architecture-specific libc.so startup code written in assembler.

__libc_early_init should not be used to replace _dl_var_init (as
it exists today on some architectures).  Instead, _dl_lookup_direct
should be used to look up a new variable symbol in libc.so, and
that should then be initialized from the dynamic loader, immediately
after the object has been loaded in _dl_map_object_from_fd (before
relocation is run).  This way, more IFUNC resolvers which depend on
these variables will work.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2020-04-24 22:32:09 +02:00
..
bits Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
htl Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
sys Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
____longjmp_chk.S Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
c++-types.data hurd: Add c++-types expected result 2016-03-20 22:16:34 +01:00
dl-machine.h
exc2signal.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
getcontext.S Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
Implies hurd: Add hurd thread library 2018-04-02 01:44:14 +02:00
init-first.c elf: Implement __libc_early_init 2020-04-24 22:32:09 +02:00
intr-msg.h Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
ioperm.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
jmp_buf-macros.h hurd: Add jmp_buf-macros.h 2018-01-06 02:32:55 +01:00
ld.abilist ld.so: Do not export free/calloc/malloc/realloc functions [BZ #25486] 2020-02-15 11:01:23 +01:00
libanl.abilist Ignore absolute symbols in ABI tests. 2018-05-04 15:46:32 +00:00
libBrokenLocale.abilist Ignore absolute symbols in ABI tests. 2018-05-04 15:46:32 +00:00
libc.abilist hurd: add mach_print function 2020-04-14 13:19:18 +02:00
libcrypt.abilist Ignore absolute symbols in ABI tests. 2018-05-04 15:46:32 +00:00
libdl.abilist Ignore absolute symbols in ABI tests. 2018-05-04 15:46:32 +00:00
libm.abilist Make totalorder and totalordermag functions take pointer arguments. 2019-08-15 15:18:34 +00:00
libnsl.abilist Ignore absolute symbols in ABI tests. 2018-05-04 15:46:32 +00:00
libpthread.abilist htl: Add missing functions and defines for robust mutexes 2020-02-16 14:08:56 +00:00
libresolv.abilist Ignore absolute symbols in ABI tests. 2018-05-04 15:46:32 +00:00
librt.abilist Finish move of clock_* functions to libc. [BZ #24959] 2019-09-04 14:39:38 +02:00
libutil.abilist Ignore absolute symbols in ABI tests. 2018-05-04 15:46:32 +00:00
localplt.data ld.so: Do not export free/calloc/malloc/realloc functions [BZ #25486] 2020-02-15 11:01:23 +01:00
longjmp-ts.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
makecontext.S Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
Makefile pthread: Move robust mutex tests from nptl to sysdeps/pthread 2020-02-16 14:43:54 +00:00
setcontext.S Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
sigcontextinfo.h Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
signal-defines.sym Fix struct sigaltstack namespace (bug 21517). 2017-06-05 10:17:46 +00:00
sigreturn.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
static-start.S Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
swapcontext.S Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tls.h x86: Avoid single-argument _Static_assert in <tls.h> 2020-02-17 11:12:03 +01:00
tlsdesc.sym hurd: Add tlsdesc.sym 2018-01-30 00:52:48 +01:00
trampoline.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
ucontext_i.sym hurd: Add getcontext, makecontext, setcontext, swapcontext 2019-12-29 16:54:08 +01:00
Versions * hurd/hurdselect.c (_hurd_select): Fix 2002-04-02 04:43:06 +00:00