Fix stdio-common tests for GCC 12 -Waddress
[glibc.git] / elf / rtld.c
blob9642eb9c92d56614390b01d0c39e334fe6bb872c
1 /* Run time dynamic linker.
2 Copyright (C) 1995-2021 Free Software Foundation, Inc.
3 This file is part of the GNU C Library.
5 The GNU C Library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
10 The GNU C Library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Lesser General Public License for more details.
15 You should have received a copy of the GNU Lesser General Public
16 License along with the GNU C Library; if not, see
17 <https://www.gnu.org/licenses/>. */
19 #include <errno.h>
20 #include <dlfcn.h>
21 #include <fcntl.h>
22 #include <stdbool.h>
23 #include <stdlib.h>
24 #include <string.h>
25 #include <unistd.h>
26 #include <sys/mman.h>
27 #include <sys/param.h>
28 #include <sys/stat.h>
29 #include <ldsodefs.h>
30 #include <_itoa.h>
31 #include <entry.h>
32 #include <fpu_control.h>
33 #include <hp-timing.h>
34 #include <libc-lock.h>
35 #include "dynamic-link.h"
36 #include <dl-librecon.h>
37 #include <unsecvars.h>
38 #include <dl-cache.h>
39 #include <dl-osinfo.h>
40 #include <dl-procinfo.h>
41 #include <dl-prop.h>
42 #include <dl-vdso.h>
43 #include <dl-vdso-setup.h>
44 #include <tls.h>
45 #include <stap-probe.h>
46 #include <stackinfo.h>
47 #include <not-cancel.h>
48 #include <array_length.h>
49 #include <libc-early-init.h>
50 #include <dl-main.h>
51 #include <gnu/lib-names.h>
52 #include <dl-tunables.h>
54 #include <assert.h>
56 /* Only enables rtld profiling for architectures which provides non generic
57 hp-timing support. The generic support requires either syscall
58 (clock_gettime), which will incur in extra overhead on loading time.
59 Using vDSO is also an option, but it will require extra support on loader
60 to setup the vDSO pointer before its usage. */
61 #if HP_TIMING_INLINE
62 # define RLTD_TIMING_DECLARE(var, classifier,...) \
63 classifier hp_timing_t var __VA_ARGS__
64 # define RTLD_TIMING_VAR(var) RLTD_TIMING_DECLARE (var, )
65 # define RTLD_TIMING_SET(var, value) (var) = (value)
66 # define RTLD_TIMING_REF(var) &(var)
68 static inline void
69 rtld_timer_start (hp_timing_t *var)
71 HP_TIMING_NOW (*var);
74 static inline void
75 rtld_timer_stop (hp_timing_t *var, hp_timing_t start)
77 hp_timing_t stop;
78 HP_TIMING_NOW (stop);
79 HP_TIMING_DIFF (*var, start, stop);
82 static inline void
83 rtld_timer_accum (hp_timing_t *sum, hp_timing_t start)
85 hp_timing_t stop;
86 rtld_timer_stop (&stop, start);
87 HP_TIMING_ACCUM_NT(*sum, stop);
89 #else
90 # define RLTD_TIMING_DECLARE(var, classifier...)
91 # define RTLD_TIMING_SET(var, value)
92 # define RTLD_TIMING_VAR(var)
93 # define RTLD_TIMING_REF(var) 0
94 # define rtld_timer_start(var)
95 # define rtld_timer_stop(var, start)
96 # define rtld_timer_accum(sum, start)
97 #endif
99 /* Avoid PLT use for our local calls at startup. */
100 extern __typeof (__mempcpy) __mempcpy attribute_hidden;
102 /* GCC has mental blocks about _exit. */
103 extern __typeof (_exit) exit_internal asm ("_exit") attribute_hidden;
104 #define _exit exit_internal
106 /* Helper function to handle errors while resolving symbols. */
107 static void print_unresolved (int errcode, const char *objname,
108 const char *errsting);
110 /* Helper function to handle errors when a version is missing. */
111 static void print_missing_version (int errcode, const char *objname,
112 const char *errsting);
114 /* Print the various times we collected. */
115 static void print_statistics (const hp_timing_t *total_timep);
117 /* Creates an empty audit list. */
118 static void audit_list_init (struct audit_list *);
120 /* Add a string to the end of the audit list, for later parsing. Must
121 not be called after audit_list_next. */
122 static void audit_list_add_string (struct audit_list *, const char *);
124 /* Add the audit strings from the link map, found in the dynamic
125 segment at TG (either DT_AUDIT and DT_DEPAUDIT). Must be called
126 before audit_list_next. */
127 static void audit_list_add_dynamic_tag (struct audit_list *,
128 struct link_map *,
129 unsigned int tag);
131 /* Extract the next audit module from the audit list. Only modules
132 for which dso_name_valid_for_suid is true are returned. Must be
133 called after all the audit_list_add_string,
134 audit_list_add_dynamic_tags calls. */
135 static const char *audit_list_next (struct audit_list *);
137 /* Initialize *STATE with the defaults. */
138 static void dl_main_state_init (struct dl_main_state *state);
140 /* Process all environments variables the dynamic linker must recognize.
141 Since all of them start with `LD_' we are a bit smarter while finding
142 all the entries. */
143 extern char **_environ attribute_hidden;
144 static void process_envvars (struct dl_main_state *state);
146 #ifdef DL_ARGV_NOT_RELRO
147 int _dl_argc attribute_hidden;
148 char **_dl_argv = NULL;
149 /* Nonzero if we were run directly. */
150 unsigned int _dl_skip_args attribute_hidden;
151 #else
152 int _dl_argc attribute_relro attribute_hidden;
153 char **_dl_argv attribute_relro = NULL;
154 unsigned int _dl_skip_args attribute_relro attribute_hidden;
155 #endif
156 rtld_hidden_data_def (_dl_argv)
158 #ifndef THREAD_SET_STACK_GUARD
159 /* Only exported for architectures that don't store the stack guard canary
160 in thread local area. */
161 uintptr_t __stack_chk_guard attribute_relro;
162 #endif
164 /* Only exported for architectures that don't store the pointer guard
165 value in thread local area. */
166 uintptr_t __pointer_chk_guard_local attribute_relro attribute_hidden;
167 #ifndef THREAD_SET_POINTER_GUARD
168 strong_alias (__pointer_chk_guard_local, __pointer_chk_guard)
169 #endif
171 /* Check that AT_SECURE=0, or that the passed name does not contain
172 directories and is not overly long. Reject empty names
173 unconditionally. */
174 static bool
175 dso_name_valid_for_suid (const char *p)
177 if (__glibc_unlikely (__libc_enable_secure))
179 /* Ignore pathnames with directories for AT_SECURE=1
180 programs, and also skip overlong names. */
181 size_t len = strlen (p);
182 if (len >= SECURE_NAME_LIMIT || memchr (p, '/', len) != NULL)
183 return false;
185 return *p != '\0';
188 static void
189 audit_list_init (struct audit_list *list)
191 list->length = 0;
192 list->current_index = 0;
193 list->current_tail = NULL;
196 static void
197 audit_list_add_string (struct audit_list *list, const char *string)
199 /* Empty strings do not load anything. */
200 if (*string == '\0')
201 return;
203 if (list->length == array_length (list->audit_strings))
204 _dl_fatal_printf ("Fatal glibc error: Too many audit modules requested\n");
206 list->audit_strings[list->length++] = string;
208 /* Initialize processing of the first string for
209 audit_list_next. */
210 if (list->length == 1)
211 list->current_tail = string;
214 static void
215 audit_list_add_dynamic_tag (struct audit_list *list, struct link_map *main_map,
216 unsigned int tag)
218 ElfW(Dyn) *info = main_map->l_info[ADDRIDX (tag)];
219 const char *strtab = (const char *) D_PTR (main_map, l_info[DT_STRTAB]);
220 if (info != NULL)
221 audit_list_add_string (list, strtab + info->d_un.d_val);
224 static const char *
225 audit_list_next (struct audit_list *list)
227 if (list->current_tail == NULL)
228 return NULL;
230 while (true)
232 /* Advance to the next string in audit_strings if the current
233 string has been exhausted. */
234 while (*list->current_tail == '\0')
236 ++list->current_index;
237 if (list->current_index == list->length)
239 list->current_tail = NULL;
240 return NULL;
242 list->current_tail = list->audit_strings[list->current_index];
245 /* Split the in-string audit list at the next colon colon. */
246 size_t len = strcspn (list->current_tail, ":");
247 if (len > 0 && len < sizeof (list->fname))
249 memcpy (list->fname, list->current_tail, len);
250 list->fname[len] = '\0';
252 else
253 /* Mark the name as unusable for dso_name_valid_for_suid. */
254 list->fname[0] = '\0';
256 /* Skip over the substring and the following delimiter. */
257 list->current_tail += len;
258 if (*list->current_tail == ':')
259 ++list->current_tail;
261 /* If the name is valid, return it. */
262 if (dso_name_valid_for_suid (list->fname))
263 return list->fname;
265 /* Otherwise wrap around to find the next list element. . */
269 /* Count audit modules before they are loaded so GLRO(dl_naudit)
270 is not yet usable. */
271 static size_t
272 audit_list_count (struct audit_list *list)
274 /* Restore the audit_list iterator state at the end. */
275 const char *saved_tail = list->current_tail;
276 size_t naudit = 0;
278 assert (list->current_index == 0);
279 while (audit_list_next (list) != NULL)
280 naudit++;
281 list->current_tail = saved_tail;
282 list->current_index = 0;
283 return naudit;
286 static void
287 dl_main_state_init (struct dl_main_state *state)
289 audit_list_init (&state->audit_list);
290 state->library_path = NULL;
291 state->library_path_source = NULL;
292 state->preloadlist = NULL;
293 state->preloadarg = NULL;
294 state->glibc_hwcaps_prepend = NULL;
295 state->glibc_hwcaps_mask = NULL;
296 state->mode = rtld_mode_normal;
297 state->any_debug = false;
298 state->version_info = false;
301 #ifndef HAVE_INLINED_SYSCALLS
302 /* Set nonzero during loading and initialization of executable and
303 libraries, cleared before the executable's entry point runs. This
304 must not be initialized to nonzero, because the unused dynamic
305 linker loaded in for libc.so's "ld.so.1" dep will provide the
306 definition seen by libc.so's initializer; that value must be zero,
307 and will be since that dynamic linker's _dl_start and dl_main will
308 never be called. */
309 int _dl_starting_up = 0;
310 rtld_hidden_def (_dl_starting_up)
311 #endif
313 /* This is the structure which defines all variables global to ld.so
314 (except those which cannot be added for some reason). */
315 struct rtld_global _rtld_global =
317 /* Get architecture specific initializer. */
318 #include <dl-procruntime.c>
319 /* Generally the default presumption without further information is an
320 * executable stack but this is not true for all platforms. */
321 ._dl_stack_flags = DEFAULT_STACK_PERMS,
322 #ifdef _LIBC_REENTRANT
323 ._dl_load_lock = _RTLD_LOCK_RECURSIVE_INITIALIZER,
324 ._dl_load_write_lock = _RTLD_LOCK_RECURSIVE_INITIALIZER,
325 ._dl_load_tls_lock = _RTLD_LOCK_RECURSIVE_INITIALIZER,
326 #endif
327 ._dl_nns = 1,
328 ._dl_ns =
330 #ifdef _LIBC_REENTRANT
331 [LM_ID_BASE] = { ._ns_unique_sym_table
332 = { .lock = _RTLD_LOCK_RECURSIVE_INITIALIZER } }
333 #endif
336 /* If we would use strong_alias here the compiler would see a
337 non-hidden definition. This would undo the effect of the previous
338 declaration. So spell out what strong_alias does plus add the
339 visibility attribute. */
340 extern struct rtld_global _rtld_local
341 __attribute__ ((alias ("_rtld_global"), visibility ("hidden")));
344 /* This variable is similar to _rtld_local, but all values are
345 read-only after relocation. */
346 struct rtld_global_ro _rtld_global_ro attribute_relro =
348 /* Get architecture specific initializer. */
349 #include <dl-procinfo.c>
350 #ifdef NEED_DL_SYSINFO
351 ._dl_sysinfo = DL_SYSINFO_DEFAULT,
352 #endif
353 ._dl_debug_fd = STDERR_FILENO,
354 ._dl_use_load_bias = -2,
355 ._dl_correct_cache_id = _DL_CACHE_DEFAULT_ID,
356 #if !HAVE_TUNABLES
357 ._dl_hwcap_mask = HWCAP_IMPORTANT,
358 #endif
359 ._dl_lazy = 1,
360 ._dl_fpu_control = _FPU_DEFAULT,
361 ._dl_pagesize = EXEC_PAGESIZE,
362 ._dl_inhibit_cache = 0,
364 /* Function pointers. */
365 ._dl_debug_printf = _dl_debug_printf,
366 ._dl_mcount = _dl_mcount,
367 ._dl_lookup_symbol_x = _dl_lookup_symbol_x,
368 ._dl_open = _dl_open,
369 ._dl_close = _dl_close,
370 ._dl_catch_error = _rtld_catch_error,
371 ._dl_error_free = _dl_error_free,
372 ._dl_tls_get_addr_soft = _dl_tls_get_addr_soft,
373 #ifdef HAVE_DL_DISCOVER_OSVERSION
374 ._dl_discover_osversion = _dl_discover_osversion
375 #endif
377 /* If we would use strong_alias here the compiler would see a
378 non-hidden definition. This would undo the effect of the previous
379 declaration. So spell out was strong_alias does plus add the
380 visibility attribute. */
381 extern struct rtld_global_ro _rtld_local_ro
382 __attribute__ ((alias ("_rtld_global_ro"), visibility ("hidden")));
385 static void dl_main (const ElfW(Phdr) *phdr, ElfW(Word) phnum,
386 ElfW(Addr) *user_entry, ElfW(auxv_t) *auxv);
388 /* These two variables cannot be moved into .data.rel.ro. */
389 static struct libname_list _dl_rtld_libname;
390 static struct libname_list _dl_rtld_libname2;
392 /* Variable for statistics. */
393 RLTD_TIMING_DECLARE (relocate_time, static);
394 RLTD_TIMING_DECLARE (load_time, static, attribute_relro);
395 RLTD_TIMING_DECLARE (start_time, static, attribute_relro);
397 /* Additional definitions needed by TLS initialization. */
398 #ifdef TLS_INIT_HELPER
399 TLS_INIT_HELPER
400 #endif
402 /* Helper function for syscall implementation. */
403 #ifdef DL_SYSINFO_IMPLEMENTATION
404 DL_SYSINFO_IMPLEMENTATION
405 #endif
407 /* Before ld.so is relocated we must not access variables which need
408 relocations. This means variables which are exported. Variables
409 declared as static are fine. If we can mark a variable hidden this
410 is fine, too. The latter is important here. We can avoid setting
411 up a temporary link map for ld.so if we can mark _rtld_global as
412 hidden. */
413 #ifdef PI_STATIC_AND_HIDDEN
414 # define DONT_USE_BOOTSTRAP_MAP 1
415 #endif
417 #ifdef DONT_USE_BOOTSTRAP_MAP
418 static ElfW(Addr) _dl_start_final (void *arg);
419 #else
420 struct dl_start_final_info
422 struct link_map l;
423 RTLD_TIMING_VAR (start_time);
425 static ElfW(Addr) _dl_start_final (void *arg,
426 struct dl_start_final_info *info);
427 #endif
429 /* These defined magically in the linker script. */
430 extern char _begin[] attribute_hidden;
431 extern char _etext[] attribute_hidden;
432 extern char _end[] attribute_hidden;
435 #ifdef RTLD_START
436 RTLD_START
437 #else
438 # error "sysdeps/MACHINE/dl-machine.h fails to define RTLD_START"
439 #endif
441 /* This is the second half of _dl_start (below). It can be inlined safely
442 under DONT_USE_BOOTSTRAP_MAP, where it is careful not to make any GOT
443 references. When the tools don't permit us to avoid using a GOT entry
444 for _dl_rtld_global (no attribute_hidden support), we must make sure
445 this function is not inlined (see below). */
447 #ifdef DONT_USE_BOOTSTRAP_MAP
448 static inline ElfW(Addr) __attribute__ ((always_inline))
449 _dl_start_final (void *arg)
450 #else
451 static ElfW(Addr) __attribute__ ((noinline))
452 _dl_start_final (void *arg, struct dl_start_final_info *info)
453 #endif
455 ElfW(Addr) start_addr;
457 /* If it hasn't happen yet record the startup time. */
458 rtld_timer_start (&start_time);
459 #if !defined DONT_USE_BOOTSTRAP_MAP
460 RTLD_TIMING_SET (start_time, info->start_time);
461 #endif
463 /* Transfer data about ourselves to the permanent link_map structure. */
464 #ifndef DONT_USE_BOOTSTRAP_MAP
465 GL(dl_rtld_map).l_addr = info->l.l_addr;
466 GL(dl_rtld_map).l_ld = info->l.l_ld;
467 GL(dl_rtld_map).l_ld_readonly = info->l.l_ld_readonly;
468 memcpy (GL(dl_rtld_map).l_info, info->l.l_info,
469 sizeof GL(dl_rtld_map).l_info);
470 GL(dl_rtld_map).l_mach = info->l.l_mach;
471 GL(dl_rtld_map).l_relocated = 1;
472 #endif
473 _dl_setup_hash (&GL(dl_rtld_map));
474 GL(dl_rtld_map).l_real = &GL(dl_rtld_map);
475 GL(dl_rtld_map).l_map_start = (ElfW(Addr)) _begin;
476 GL(dl_rtld_map).l_map_end = (ElfW(Addr)) _end;
477 GL(dl_rtld_map).l_text_end = (ElfW(Addr)) _etext;
478 /* Copy the TLS related data if necessary. */
479 #ifndef DONT_USE_BOOTSTRAP_MAP
480 # if NO_TLS_OFFSET != 0
481 GL(dl_rtld_map).l_tls_offset = NO_TLS_OFFSET;
482 # endif
483 #endif
485 /* Initialize the stack end variable. */
486 __libc_stack_end = __builtin_frame_address (0);
488 /* Call the OS-dependent function to set up life so we can do things like
489 file access. It will call `dl_main' (below) to do all the real work
490 of the dynamic linker, and then unwind our frame and run the user
491 entry point on the same stack we entered on. */
492 start_addr = _dl_sysdep_start (arg, &dl_main);
494 if (__glibc_unlikely (GLRO(dl_debug_mask) & DL_DEBUG_STATISTICS))
496 RTLD_TIMING_VAR (rtld_total_time);
497 rtld_timer_stop (&rtld_total_time, start_time);
498 print_statistics (RTLD_TIMING_REF(rtld_total_time));
501 return start_addr;
504 static ElfW(Addr) __attribute_used__
505 _dl_start (void *arg)
507 #ifdef DONT_USE_BOOTSTRAP_MAP
508 # define bootstrap_map GL(dl_rtld_map)
509 #else
510 struct dl_start_final_info info;
511 # define bootstrap_map info.l
512 #endif
514 /* This #define produces dynamic linking inline functions for
515 bootstrap relocation instead of general-purpose relocation.
516 Since ld.so must not have any undefined symbols the result
517 is trivial: always the map of ld.so itself. */
518 #define RTLD_BOOTSTRAP
519 #define BOOTSTRAP_MAP (&bootstrap_map)
520 #define RESOLVE_MAP(sym, version, flags) BOOTSTRAP_MAP
521 #include "dynamic-link.h"
523 #ifdef DONT_USE_BOOTSTRAP_MAP
524 rtld_timer_start (&start_time);
525 #else
526 rtld_timer_start (&info.start_time);
527 #endif
529 /* Partly clean the `bootstrap_map' structure up. Don't use
530 `memset' since it might not be built in or inlined and we cannot
531 make function calls at this point. Use '__builtin_memset' if we
532 know it is available. We do not have to clear the memory if we
533 do not have to use the temporary bootstrap_map. Global variables
534 are initialized to zero by default. */
535 #ifndef DONT_USE_BOOTSTRAP_MAP
536 # ifdef HAVE_BUILTIN_MEMSET
537 __builtin_memset (bootstrap_map.l_info, '\0', sizeof (bootstrap_map.l_info));
538 # else
539 for (size_t cnt = 0;
540 cnt < sizeof (bootstrap_map.l_info) / sizeof (bootstrap_map.l_info[0]);
541 ++cnt)
542 bootstrap_map.l_info[cnt] = 0;
543 # endif
544 #endif
546 /* Figure out the run-time load address of the dynamic linker itself. */
547 bootstrap_map.l_addr = elf_machine_load_address ();
549 /* Read our own dynamic section and fill in the info array. */
550 bootstrap_map.l_ld = (void *) bootstrap_map.l_addr + elf_machine_dynamic ();
551 elf_get_dynamic_info (&bootstrap_map);
553 #if NO_TLS_OFFSET != 0
554 bootstrap_map.l_tls_offset = NO_TLS_OFFSET;
555 #endif
557 #ifdef ELF_MACHINE_BEFORE_RTLD_RELOC
558 ELF_MACHINE_BEFORE_RTLD_RELOC (bootstrap_map.l_info);
559 #endif
561 if (bootstrap_map.l_addr || ! bootstrap_map.l_info[VALIDX(DT_GNU_PRELINKED)])
563 /* Relocate ourselves so we can do normal function calls and
564 data access using the global offset table. */
566 ELF_DYNAMIC_RELOCATE (&bootstrap_map, 0, 0, 0);
568 bootstrap_map.l_relocated = 1;
570 /* Please note that we don't allow profiling of this object and
571 therefore need not test whether we have to allocate the array
572 for the relocation results (as done in dl-reloc.c). */
574 /* Now life is sane; we can call functions and access global data.
575 Set up to use the operating system facilities, and find out from
576 the operating system's program loader where to find the program
577 header table in core. Put the rest of _dl_start into a separate
578 function, that way the compiler cannot put accesses to the GOT
579 before ELF_DYNAMIC_RELOCATE. */
581 __rtld_malloc_init_stubs ();
584 #ifdef DONT_USE_BOOTSTRAP_MAP
585 ElfW(Addr) entry = _dl_start_final (arg);
586 #else
587 ElfW(Addr) entry = _dl_start_final (arg, &info);
588 #endif
590 #ifndef ELF_MACHINE_START_ADDRESS
591 # define ELF_MACHINE_START_ADDRESS(map, start) (start)
592 #endif
594 return ELF_MACHINE_START_ADDRESS (GL(dl_ns)[LM_ID_BASE]._ns_loaded, entry);
600 /* Now life is peachy; we can do all normal operations.
601 On to the real work. */
603 /* Some helper functions. */
605 /* Arguments to relocate_doit. */
606 struct relocate_args
608 struct link_map *l;
609 int reloc_mode;
612 struct map_args
614 /* Argument to map_doit. */
615 const char *str;
616 struct link_map *loader;
617 int mode;
618 /* Return value of map_doit. */
619 struct link_map *map;
622 struct dlmopen_args
624 const char *fname;
625 struct link_map *map;
628 struct lookup_args
630 const char *name;
631 struct link_map *map;
632 void *result;
635 /* Arguments to version_check_doit. */
636 struct version_check_args
638 int doexit;
639 int dotrace;
642 static void
643 relocate_doit (void *a)
645 struct relocate_args *args = (struct relocate_args *) a;
647 _dl_relocate_object (args->l, args->l->l_scope, args->reloc_mode, 0);
650 static void
651 map_doit (void *a)
653 struct map_args *args = (struct map_args *) a;
654 int type = (args->mode == __RTLD_OPENEXEC) ? lt_executable : lt_library;
655 args->map = _dl_map_object (args->loader, args->str, type, 0,
656 args->mode, LM_ID_BASE);
659 static void
660 dlmopen_doit (void *a)
662 struct dlmopen_args *args = (struct dlmopen_args *) a;
663 args->map = _dl_open (args->fname,
664 (RTLD_LAZY | __RTLD_DLOPEN | __RTLD_AUDIT
665 | __RTLD_SECURE),
666 dl_main, LM_ID_NEWLM, _dl_argc, _dl_argv,
667 __environ);
670 static void
671 lookup_doit (void *a)
673 struct lookup_args *args = (struct lookup_args *) a;
674 const ElfW(Sym) *ref = NULL;
675 args->result = NULL;
676 lookup_t l = _dl_lookup_symbol_x (args->name, args->map, &ref,
677 args->map->l_local_scope, NULL, 0,
678 DL_LOOKUP_RETURN_NEWEST, NULL);
679 if (ref != NULL)
680 args->result = DL_SYMBOL_ADDRESS (l, ref);
683 static void
684 version_check_doit (void *a)
686 struct version_check_args *args = (struct version_check_args *) a;
687 if (_dl_check_all_versions (GL(dl_ns)[LM_ID_BASE]._ns_loaded, 1,
688 args->dotrace) && args->doexit)
689 /* We cannot start the application. Abort now. */
690 _exit (1);
694 static inline struct link_map *
695 find_needed (const char *name)
697 struct r_scope_elem *scope = &GL(dl_ns)[LM_ID_BASE]._ns_loaded->l_searchlist;
698 unsigned int n = scope->r_nlist;
700 while (n-- > 0)
701 if (_dl_name_match_p (name, scope->r_list[n]))
702 return scope->r_list[n];
704 /* Should never happen. */
705 return NULL;
708 static int
709 match_version (const char *string, struct link_map *map)
711 const char *strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]);
712 ElfW(Verdef) *def;
714 #define VERDEFTAG (DT_NUM + DT_THISPROCNUM + DT_VERSIONTAGIDX (DT_VERDEF))
715 if (map->l_info[VERDEFTAG] == NULL)
716 /* The file has no symbol versioning. */
717 return 0;
719 def = (ElfW(Verdef) *) ((char *) map->l_addr
720 + map->l_info[VERDEFTAG]->d_un.d_ptr);
721 while (1)
723 ElfW(Verdaux) *aux = (ElfW(Verdaux) *) ((char *) def + def->vd_aux);
725 /* Compare the version strings. */
726 if (strcmp (string, strtab + aux->vda_name) == 0)
727 /* Bingo! */
728 return 1;
730 /* If no more definitions we failed to find what we want. */
731 if (def->vd_next == 0)
732 break;
734 /* Next definition. */
735 def = (ElfW(Verdef) *) ((char *) def + def->vd_next);
738 return 0;
741 static bool tls_init_tp_called;
743 static void *
744 init_tls (size_t naudit)
746 /* Number of elements in the static TLS block. */
747 GL(dl_tls_static_nelem) = GL(dl_tls_max_dtv_idx);
749 /* Do not do this twice. The audit interface might have required
750 the DTV interfaces to be set up early. */
751 if (GL(dl_initial_dtv) != NULL)
752 return NULL;
754 /* Allocate the array which contains the information about the
755 dtv slots. We allocate a few entries more than needed to
756 avoid the need for reallocation. */
757 size_t nelem = GL(dl_tls_max_dtv_idx) + 1 + TLS_SLOTINFO_SURPLUS;
759 /* Allocate. */
760 GL(dl_tls_dtv_slotinfo_list) = (struct dtv_slotinfo_list *)
761 calloc (sizeof (struct dtv_slotinfo_list)
762 + nelem * sizeof (struct dtv_slotinfo), 1);
763 /* No need to check the return value. If memory allocation failed
764 the program would have been terminated. */
766 struct dtv_slotinfo *slotinfo = GL(dl_tls_dtv_slotinfo_list)->slotinfo;
767 GL(dl_tls_dtv_slotinfo_list)->len = nelem;
768 GL(dl_tls_dtv_slotinfo_list)->next = NULL;
770 /* Fill in the information from the loaded modules. No namespace
771 but the base one can be filled at this time. */
772 assert (GL(dl_ns)[LM_ID_BASE + 1]._ns_loaded == NULL);
773 int i = 0;
774 for (struct link_map *l = GL(dl_ns)[LM_ID_BASE]._ns_loaded; l != NULL;
775 l = l->l_next)
776 if (l->l_tls_blocksize != 0)
778 /* This is a module with TLS data. Store the map reference.
779 The generation counter is zero. */
780 slotinfo[i].map = l;
781 /* slotinfo[i].gen = 0; */
782 ++i;
784 assert (i == GL(dl_tls_max_dtv_idx));
786 /* Calculate the size of the static TLS surplus. */
787 _dl_tls_static_surplus_init (naudit);
789 /* Compute the TLS offsets for the various blocks. */
790 _dl_determine_tlsoffset ();
792 /* Construct the static TLS block and the dtv for the initial
793 thread. For some platforms this will include allocating memory
794 for the thread descriptor. The memory for the TLS block will
795 never be freed. It should be allocated accordingly. The dtv
796 array can be changed if dynamic loading requires it. */
797 void *tcbp = _dl_allocate_tls_storage ();
798 if (tcbp == NULL)
799 _dl_fatal_printf ("\
800 cannot allocate TLS data structures for initial thread\n");
802 /* Store for detection of the special case by __tls_get_addr
803 so it knows not to pass this dtv to the normal realloc. */
804 GL(dl_initial_dtv) = GET_DTV (tcbp);
806 /* And finally install it for the main thread. */
807 const char *lossage = TLS_INIT_TP (tcbp);
808 if (__glibc_unlikely (lossage != NULL))
809 _dl_fatal_printf ("cannot set up thread-local storage: %s\n", lossage);
810 __tls_init_tp ();
811 tls_init_tp_called = true;
813 return tcbp;
816 static unsigned int
817 do_preload (const char *fname, struct link_map *main_map, const char *where)
819 const char *objname;
820 const char *err_str = NULL;
821 struct map_args args;
822 bool malloced;
824 args.str = fname;
825 args.loader = main_map;
826 args.mode = __RTLD_SECURE;
828 unsigned int old_nloaded = GL(dl_ns)[LM_ID_BASE]._ns_nloaded;
830 (void) _dl_catch_error (&objname, &err_str, &malloced, map_doit, &args);
831 if (__glibc_unlikely (err_str != NULL))
833 _dl_error_printf ("\
834 ERROR: ld.so: object '%s' from %s cannot be preloaded (%s): ignored.\n",
835 fname, where, err_str);
836 /* No need to call free, this is still before
837 the libc's malloc is used. */
839 else if (GL(dl_ns)[LM_ID_BASE]._ns_nloaded != old_nloaded)
840 /* It is no duplicate. */
841 return 1;
843 /* Nothing loaded. */
844 return 0;
847 static void
848 security_init (void)
850 /* Set up the stack checker's canary. */
851 uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard (_dl_random);
852 #ifdef THREAD_SET_STACK_GUARD
853 THREAD_SET_STACK_GUARD (stack_chk_guard);
854 #else
855 __stack_chk_guard = stack_chk_guard;
856 #endif
858 /* Set up the pointer guard as well, if necessary. */
859 uintptr_t pointer_chk_guard
860 = _dl_setup_pointer_guard (_dl_random, stack_chk_guard);
861 #ifdef THREAD_SET_POINTER_GUARD
862 THREAD_SET_POINTER_GUARD (pointer_chk_guard);
863 #endif
864 __pointer_chk_guard_local = pointer_chk_guard;
866 /* We do not need the _dl_random value anymore. The less
867 information we leave behind, the better, so clear the
868 variable. */
869 _dl_random = NULL;
872 #include <setup-vdso.h>
874 /* The LD_PRELOAD environment variable gives list of libraries
875 separated by white space or colons that are loaded before the
876 executable's dependencies and prepended to the global scope list.
877 (If the binary is running setuid all elements containing a '/' are
878 ignored since it is insecure.) Return the number of preloads
879 performed. Ditto for --preload command argument. */
880 unsigned int
881 handle_preload_list (const char *preloadlist, struct link_map *main_map,
882 const char *where)
884 unsigned int npreloads = 0;
885 const char *p = preloadlist;
886 char fname[SECURE_PATH_LIMIT];
888 while (*p != '\0')
890 /* Split preload list at space/colon. */
891 size_t len = strcspn (p, " :");
892 if (len > 0 && len < sizeof (fname))
894 memcpy (fname, p, len);
895 fname[len] = '\0';
897 else
898 fname[0] = '\0';
900 /* Skip over the substring and the following delimiter. */
901 p += len;
902 if (*p != '\0')
903 ++p;
905 if (dso_name_valid_for_suid (fname))
906 npreloads += do_preload (fname, main_map, where);
908 return npreloads;
911 /* Called if the audit DSO cannot be used: if it does not have the
912 appropriate interfaces, or it expects a more recent version library
913 version than what the dynamic linker provides. */
914 static void
915 unload_audit_module (struct link_map *map, int original_tls_idx)
917 #ifndef NDEBUG
918 Lmid_t ns = map->l_ns;
919 #endif
920 _dl_close (map);
922 /* Make sure the namespace has been cleared entirely. */
923 assert (GL(dl_ns)[ns]._ns_loaded == NULL);
924 assert (GL(dl_ns)[ns]._ns_nloaded == 0);
926 GL(dl_tls_max_dtv_idx) = original_tls_idx;
929 /* Called to print an error message if loading of an audit module
930 failed. */
931 static void
932 report_audit_module_load_error (const char *name, const char *err_str,
933 bool malloced)
935 _dl_error_printf ("\
936 ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
937 name, err_str);
938 if (malloced)
939 free ((char *) err_str);
942 /* Load one audit module. */
943 static void
944 load_audit_module (const char *name, struct audit_ifaces **last_audit)
946 int original_tls_idx = GL(dl_tls_max_dtv_idx);
948 struct dlmopen_args dlmargs;
949 dlmargs.fname = name;
950 dlmargs.map = NULL;
952 const char *objname;
953 const char *err_str = NULL;
954 bool malloced;
955 _dl_catch_error (&objname, &err_str, &malloced, dlmopen_doit, &dlmargs);
956 if (__glibc_unlikely (err_str != NULL))
958 report_audit_module_load_error (name, err_str, malloced);
959 return;
962 struct lookup_args largs;
963 largs.name = "la_version";
964 largs.map = dlmargs.map;
965 _dl_catch_error (&objname, &err_str, &malloced, lookup_doit, &largs);
966 if (__glibc_likely (err_str != NULL))
968 unload_audit_module (dlmargs.map, original_tls_idx);
969 report_audit_module_load_error (name, err_str, malloced);
970 return;
973 unsigned int (*laversion) (unsigned int) = largs.result;
975 /* A null symbol indicates that something is very wrong with the
976 loaded object because defined symbols are supposed to have a
977 valid, non-null address. */
978 assert (laversion != NULL);
980 unsigned int lav = laversion (LAV_CURRENT);
981 if (lav == 0)
983 /* Only print an error message if debugging because this can
984 happen deliberately. */
985 if (GLRO(dl_debug_mask) & DL_DEBUG_FILES)
986 _dl_debug_printf ("\
987 file=%s [%lu]; audit interface function la_version returned zero; ignored.\n",
988 dlmargs.map->l_name, dlmargs.map->l_ns);
989 unload_audit_module (dlmargs.map, original_tls_idx);
990 return;
993 if (lav > LAV_CURRENT)
995 _dl_debug_printf ("\
996 ERROR: audit interface '%s' requires version %d (maximum supported version %d); ignored.\n",
997 name, lav, LAV_CURRENT);
998 unload_audit_module (dlmargs.map, original_tls_idx);
999 return;
1002 enum { naudit_ifaces = 8 };
1003 union
1005 struct audit_ifaces ifaces;
1006 void (*fptr[naudit_ifaces]) (void);
1007 } *newp = malloc (sizeof (*newp));
1008 if (newp == NULL)
1009 _dl_fatal_printf ("Out of memory while loading audit modules\n");
1011 /* Names of the auditing interfaces. All in one
1012 long string. */
1013 static const char audit_iface_names[] =
1014 "la_activity\0"
1015 "la_objsearch\0"
1016 "la_objopen\0"
1017 "la_preinit\0"
1018 #if __ELF_NATIVE_CLASS == 32
1019 "la_symbind32\0"
1020 #elif __ELF_NATIVE_CLASS == 64
1021 "la_symbind64\0"
1022 #else
1023 # error "__ELF_NATIVE_CLASS must be defined"
1024 #endif
1025 #define STRING(s) __STRING (s)
1026 "la_" STRING (ARCH_LA_PLTENTER) "\0"
1027 "la_" STRING (ARCH_LA_PLTEXIT) "\0"
1028 "la_objclose\0";
1029 unsigned int cnt = 0;
1030 const char *cp = audit_iface_names;
1033 largs.name = cp;
1034 _dl_catch_error (&objname, &err_str, &malloced, lookup_doit, &largs);
1036 /* Store the pointer. */
1037 if (err_str == NULL && largs.result != NULL)
1038 newp->fptr[cnt] = largs.result;
1039 else
1040 newp->fptr[cnt] = NULL;
1041 ++cnt;
1043 cp = rawmemchr (cp, '\0') + 1;
1045 while (*cp != '\0');
1046 assert (cnt == naudit_ifaces);
1048 /* Now append the new auditing interface to the list. */
1049 newp->ifaces.next = NULL;
1050 if (*last_audit == NULL)
1051 *last_audit = GLRO(dl_audit) = &newp->ifaces;
1052 else
1053 *last_audit = (*last_audit)->next = &newp->ifaces;
1055 /* The dynamic linker link map is statically allocated, so the
1056 cookie in _dl_new_object has not happened. */
1057 link_map_audit_state (&GL (dl_rtld_map), GLRO (dl_naudit))->cookie
1058 = (intptr_t) &GL (dl_rtld_map);
1060 ++GLRO(dl_naudit);
1062 /* Mark the DSO as being used for auditing. */
1063 dlmargs.map->l_auditing = 1;
1066 /* Notify the the audit modules that the object MAP has already been
1067 loaded. */
1068 static void
1069 notify_audit_modules_of_loaded_object (struct link_map *map)
1071 struct audit_ifaces *afct = GLRO(dl_audit);
1072 for (unsigned int cnt = 0; cnt < GLRO(dl_naudit); ++cnt)
1074 if (afct->objopen != NULL)
1076 struct auditstate *state = link_map_audit_state (map, cnt);
1077 state->bindflags = afct->objopen (map, LM_ID_BASE, &state->cookie);
1078 map->l_audit_any_plt |= state->bindflags != 0;
1081 afct = afct->next;
1085 /* Load all audit modules. */
1086 static void
1087 load_audit_modules (struct link_map *main_map, struct audit_list *audit_list)
1089 struct audit_ifaces *last_audit = NULL;
1091 while (true)
1093 const char *name = audit_list_next (audit_list);
1094 if (name == NULL)
1095 break;
1096 load_audit_module (name, &last_audit);
1099 /* Notify audit modules of the initially loaded modules (the main
1100 program and the dynamic linker itself). */
1101 if (GLRO(dl_naudit) > 0)
1103 notify_audit_modules_of_loaded_object (main_map);
1104 notify_audit_modules_of_loaded_object (&GL(dl_rtld_map));
1108 static void
1109 dl_main (const ElfW(Phdr) *phdr,
1110 ElfW(Word) phnum,
1111 ElfW(Addr) *user_entry,
1112 ElfW(auxv_t) *auxv)
1114 const ElfW(Phdr) *ph;
1115 struct link_map *main_map;
1116 size_t file_size;
1117 char *file;
1118 bool has_interp = false;
1119 unsigned int i;
1120 bool prelinked = false;
1121 bool rtld_is_main = false;
1122 void *tcbp = NULL;
1124 struct dl_main_state state;
1125 dl_main_state_init (&state);
1127 __tls_pre_init_tp ();
1129 #if !PTHREAD_IN_LIBC
1130 /* The explicit initialization here is cheaper than processing the reloc
1131 in the _rtld_local definition's initializer. */
1132 GL(dl_make_stack_executable_hook) = &_dl_make_stack_executable;
1133 #endif
1135 /* Process the environment variable which control the behaviour. */
1136 process_envvars (&state);
1138 #ifndef HAVE_INLINED_SYSCALLS
1139 /* Set up a flag which tells we are just starting. */
1140 _dl_starting_up = 1;
1141 #endif
1143 const char *ld_so_name = _dl_argv[0];
1144 if (*user_entry == (ElfW(Addr)) ENTRY_POINT)
1146 /* Ho ho. We are not the program interpreter! We are the program
1147 itself! This means someone ran ld.so as a command. Well, that
1148 might be convenient to do sometimes. We support it by
1149 interpreting the args like this:
1151 ld.so PROGRAM ARGS...
1153 The first argument is the name of a file containing an ELF
1154 executable we will load and run with the following arguments.
1155 To simplify life here, PROGRAM is searched for using the
1156 normal rules for shared objects, rather than $PATH or anything
1157 like that. We just load it and use its entry point; we don't
1158 pay attention to its PT_INTERP command (we are the interpreter
1159 ourselves). This is an easy way to test a new ld.so before
1160 installing it. */
1161 rtld_is_main = true;
1163 char *argv0 = NULL;
1165 /* Note the place where the dynamic linker actually came from. */
1166 GL(dl_rtld_map).l_name = rtld_progname;
1168 while (_dl_argc > 1)
1169 if (! strcmp (_dl_argv[1], "--list"))
1171 if (state.mode != rtld_mode_help)
1173 state.mode = rtld_mode_list;
1174 /* This means do no dependency analysis. */
1175 GLRO(dl_lazy) = -1;
1178 ++_dl_skip_args;
1179 --_dl_argc;
1180 ++_dl_argv;
1182 else if (! strcmp (_dl_argv[1], "--verify"))
1184 if (state.mode != rtld_mode_help)
1185 state.mode = rtld_mode_verify;
1187 ++_dl_skip_args;
1188 --_dl_argc;
1189 ++_dl_argv;
1191 else if (! strcmp (_dl_argv[1], "--inhibit-cache"))
1193 GLRO(dl_inhibit_cache) = 1;
1194 ++_dl_skip_args;
1195 --_dl_argc;
1196 ++_dl_argv;
1198 else if (! strcmp (_dl_argv[1], "--library-path")
1199 && _dl_argc > 2)
1201 state.library_path = _dl_argv[2];
1202 state.library_path_source = "--library-path";
1204 _dl_skip_args += 2;
1205 _dl_argc -= 2;
1206 _dl_argv += 2;
1208 else if (! strcmp (_dl_argv[1], "--inhibit-rpath")
1209 && _dl_argc > 2)
1211 GLRO(dl_inhibit_rpath) = _dl_argv[2];
1213 _dl_skip_args += 2;
1214 _dl_argc -= 2;
1215 _dl_argv += 2;
1217 else if (! strcmp (_dl_argv[1], "--audit") && _dl_argc > 2)
1219 audit_list_add_string (&state.audit_list, _dl_argv[2]);
1221 _dl_skip_args += 2;
1222 _dl_argc -= 2;
1223 _dl_argv += 2;
1225 else if (! strcmp (_dl_argv[1], "--preload") && _dl_argc > 2)
1227 state.preloadarg = _dl_argv[2];
1228 _dl_skip_args += 2;
1229 _dl_argc -= 2;
1230 _dl_argv += 2;
1232 else if (! strcmp (_dl_argv[1], "--argv0") && _dl_argc > 2)
1234 argv0 = _dl_argv[2];
1236 _dl_skip_args += 2;
1237 _dl_argc -= 2;
1238 _dl_argv += 2;
1240 else if (strcmp (_dl_argv[1], "--glibc-hwcaps-prepend") == 0
1241 && _dl_argc > 2)
1243 state.glibc_hwcaps_prepend = _dl_argv[2];
1244 _dl_skip_args += 2;
1245 _dl_argc -= 2;
1246 _dl_argv += 2;
1248 else if (strcmp (_dl_argv[1], "--glibc-hwcaps-mask") == 0
1249 && _dl_argc > 2)
1251 state.glibc_hwcaps_mask = _dl_argv[2];
1252 _dl_skip_args += 2;
1253 _dl_argc -= 2;
1254 _dl_argv += 2;
1256 #if HAVE_TUNABLES
1257 else if (! strcmp (_dl_argv[1], "--list-tunables"))
1259 state.mode = rtld_mode_list_tunables;
1261 ++_dl_skip_args;
1262 --_dl_argc;
1263 ++_dl_argv;
1265 #endif
1266 else if (! strcmp (_dl_argv[1], "--list-diagnostics"))
1268 state.mode = rtld_mode_list_diagnostics;
1270 ++_dl_skip_args;
1271 --_dl_argc;
1272 ++_dl_argv;
1274 else if (strcmp (_dl_argv[1], "--help") == 0)
1276 state.mode = rtld_mode_help;
1277 --_dl_argc;
1278 ++_dl_argv;
1280 else if (strcmp (_dl_argv[1], "--version") == 0)
1281 _dl_version ();
1282 else if (_dl_argv[1][0] == '-' && _dl_argv[1][1] == '-')
1284 if (_dl_argv[1][1] == '\0')
1285 /* End of option list. */
1286 break;
1287 else
1288 /* Unrecognized option. */
1289 _dl_usage (ld_so_name, _dl_argv[1]);
1291 else
1292 break;
1294 #if HAVE_TUNABLES
1295 if (__glibc_unlikely (state.mode == rtld_mode_list_tunables))
1297 __tunables_print ();
1298 _exit (0);
1300 #endif
1302 if (state.mode == rtld_mode_list_diagnostics)
1303 _dl_print_diagnostics (_environ);
1305 /* If we have no further argument the program was called incorrectly.
1306 Grant the user some education. */
1307 if (_dl_argc < 2)
1309 if (state.mode == rtld_mode_help)
1310 /* --help without an executable is not an error. */
1311 _dl_help (ld_so_name, &state);
1312 else
1313 _dl_usage (ld_so_name, NULL);
1316 ++_dl_skip_args;
1317 --_dl_argc;
1318 ++_dl_argv;
1320 /* The initialization of _dl_stack_flags done below assumes the
1321 executable's PT_GNU_STACK may have been honored by the kernel, and
1322 so a PT_GNU_STACK with PF_X set means the stack started out with
1323 execute permission. However, this is not really true if the
1324 dynamic linker is the executable the kernel loaded. For this
1325 case, we must reinitialize _dl_stack_flags to match the dynamic
1326 linker itself. If the dynamic linker was built with a
1327 PT_GNU_STACK, then the kernel may have loaded us with a
1328 nonexecutable stack that we will have to make executable when we
1329 load the program below unless it has a PT_GNU_STACK indicating
1330 nonexecutable stack is ok. */
1332 for (ph = phdr; ph < &phdr[phnum]; ++ph)
1333 if (ph->p_type == PT_GNU_STACK)
1335 GL(dl_stack_flags) = ph->p_flags;
1336 break;
1339 if (__glibc_unlikely (state.mode == rtld_mode_verify
1340 || state.mode == rtld_mode_help))
1342 const char *objname;
1343 const char *err_str = NULL;
1344 struct map_args args;
1345 bool malloced;
1347 args.str = rtld_progname;
1348 args.loader = NULL;
1349 args.mode = __RTLD_OPENEXEC;
1350 (void) _dl_catch_error (&objname, &err_str, &malloced, map_doit,
1351 &args);
1352 if (__glibc_unlikely (err_str != NULL))
1354 /* We don't free the returned string, the programs stops
1355 anyway. */
1356 if (state.mode == rtld_mode_help)
1357 /* Mask the failure to load the main object. The help
1358 message contains less information in this case. */
1359 _dl_help (ld_so_name, &state);
1360 else
1361 _exit (EXIT_FAILURE);
1364 else
1366 RTLD_TIMING_VAR (start);
1367 rtld_timer_start (&start);
1368 _dl_map_object (NULL, rtld_progname, lt_executable, 0,
1369 __RTLD_OPENEXEC, LM_ID_BASE);
1370 rtld_timer_stop (&load_time, start);
1373 /* Now the map for the main executable is available. */
1374 main_map = GL(dl_ns)[LM_ID_BASE]._ns_loaded;
1376 if (__glibc_likely (state.mode == rtld_mode_normal)
1377 && GL(dl_rtld_map).l_info[DT_SONAME] != NULL
1378 && main_map->l_info[DT_SONAME] != NULL
1379 && strcmp ((const char *) D_PTR (&GL(dl_rtld_map), l_info[DT_STRTAB])
1380 + GL(dl_rtld_map).l_info[DT_SONAME]->d_un.d_val,
1381 (const char *) D_PTR (main_map, l_info[DT_STRTAB])
1382 + main_map->l_info[DT_SONAME]->d_un.d_val) == 0)
1383 _dl_fatal_printf ("loader cannot load itself\n");
1385 phdr = main_map->l_phdr;
1386 phnum = main_map->l_phnum;
1387 /* We overwrite here a pointer to a malloc()ed string. But since
1388 the malloc() implementation used at this point is the dummy
1389 implementations which has no real free() function it does not
1390 makes sense to free the old string first. */
1391 main_map->l_name = (char *) "";
1392 *user_entry = main_map->l_entry;
1394 #ifdef HAVE_AUX_VECTOR
1395 /* Adjust the on-stack auxiliary vector so that it looks like the
1396 binary was executed directly. */
1397 for (ElfW(auxv_t) *av = auxv; av->a_type != AT_NULL; av++)
1398 switch (av->a_type)
1400 case AT_PHDR:
1401 av->a_un.a_val = (uintptr_t) phdr;
1402 break;
1403 case AT_PHNUM:
1404 av->a_un.a_val = phnum;
1405 break;
1406 case AT_ENTRY:
1407 av->a_un.a_val = *user_entry;
1408 break;
1409 case AT_EXECFN:
1410 av->a_un.a_val = (uintptr_t) _dl_argv[0];
1411 break;
1413 #endif
1415 /* Set the argv[0] string now that we've processed the executable. */
1416 if (argv0 != NULL)
1417 _dl_argv[0] = argv0;
1419 else
1421 /* Create a link_map for the executable itself.
1422 This will be what dlopen on "" returns. */
1423 main_map = _dl_new_object ((char *) "", "", lt_executable, NULL,
1424 __RTLD_OPENEXEC, LM_ID_BASE);
1425 assert (main_map != NULL);
1426 main_map->l_phdr = phdr;
1427 main_map->l_phnum = phnum;
1428 main_map->l_entry = *user_entry;
1430 /* Even though the link map is not yet fully initialized we can add
1431 it to the map list since there are no possible users running yet. */
1432 _dl_add_to_namespace_list (main_map, LM_ID_BASE);
1433 assert (main_map == GL(dl_ns)[LM_ID_BASE]._ns_loaded);
1435 /* At this point we are in a bit of trouble. We would have to
1436 fill in the values for l_dev and l_ino. But in general we
1437 do not know where the file is. We also do not handle AT_EXECFD
1438 even if it would be passed up.
1440 We leave the values here defined to 0. This is normally no
1441 problem as the program code itself is normally no shared
1442 object and therefore cannot be loaded dynamically. Nothing
1443 prevent the use of dynamic binaries and in these situations
1444 we might get problems. We might not be able to find out
1445 whether the object is already loaded. But since there is no
1446 easy way out and because the dynamic binary must also not
1447 have an SONAME we ignore this program for now. If it becomes
1448 a problem we can force people using SONAMEs. */
1450 /* We delay initializing the path structure until we got the dynamic
1451 information for the program. */
1454 main_map->l_map_end = 0;
1455 main_map->l_text_end = 0;
1456 /* Perhaps the executable has no PT_LOAD header entries at all. */
1457 main_map->l_map_start = ~0;
1458 /* And it was opened directly. */
1459 ++main_map->l_direct_opencount;
1461 /* Scan the program header table for the dynamic section. */
1462 for (ph = phdr; ph < &phdr[phnum]; ++ph)
1463 switch (ph->p_type)
1465 case PT_PHDR:
1466 /* Find out the load address. */
1467 main_map->l_addr = (ElfW(Addr)) phdr - ph->p_vaddr;
1468 break;
1469 case PT_DYNAMIC:
1470 /* This tells us where to find the dynamic section,
1471 which tells us everything we need to do. */
1472 main_map->l_ld = (void *) main_map->l_addr + ph->p_vaddr;
1473 main_map->l_ld_readonly = (ph->p_flags & PF_W) == 0;
1474 break;
1475 case PT_INTERP:
1476 /* This "interpreter segment" was used by the program loader to
1477 find the program interpreter, which is this program itself, the
1478 dynamic linker. We note what name finds us, so that a future
1479 dlopen call or DT_NEEDED entry, for something that wants to link
1480 against the dynamic linker as a shared library, will know that
1481 the shared object is already loaded. */
1482 _dl_rtld_libname.name = ((const char *) main_map->l_addr
1483 + ph->p_vaddr);
1484 /* _dl_rtld_libname.next = NULL; Already zero. */
1485 GL(dl_rtld_map).l_libname = &_dl_rtld_libname;
1487 /* Ordinarilly, we would get additional names for the loader from
1488 our DT_SONAME. This can't happen if we were actually linked as
1489 a static executable (detect this case when we have no DYNAMIC).
1490 If so, assume the filename component of the interpreter path to
1491 be our SONAME, and add it to our name list. */
1492 if (GL(dl_rtld_map).l_ld == NULL)
1494 const char *p = NULL;
1495 const char *cp = _dl_rtld_libname.name;
1497 /* Find the filename part of the path. */
1498 while (*cp != '\0')
1499 if (*cp++ == '/')
1500 p = cp;
1502 if (p != NULL)
1504 _dl_rtld_libname2.name = p;
1505 /* _dl_rtld_libname2.next = NULL; Already zero. */
1506 _dl_rtld_libname.next = &_dl_rtld_libname2;
1510 has_interp = true;
1511 break;
1512 case PT_LOAD:
1514 ElfW(Addr) mapstart;
1515 ElfW(Addr) allocend;
1517 /* Remember where the main program starts in memory. */
1518 mapstart = (main_map->l_addr
1519 + (ph->p_vaddr & ~(GLRO(dl_pagesize) - 1)));
1520 if (main_map->l_map_start > mapstart)
1521 main_map->l_map_start = mapstart;
1523 /* Also where it ends. */
1524 allocend = main_map->l_addr + ph->p_vaddr + ph->p_memsz;
1525 if (main_map->l_map_end < allocend)
1526 main_map->l_map_end = allocend;
1527 if ((ph->p_flags & PF_X) && allocend > main_map->l_text_end)
1528 main_map->l_text_end = allocend;
1530 break;
1532 case PT_TLS:
1533 if (ph->p_memsz > 0)
1535 /* Note that in the case the dynamic linker we duplicate work
1536 here since we read the PT_TLS entry already in
1537 _dl_start_final. But the result is repeatable so do not
1538 check for this special but unimportant case. */
1539 main_map->l_tls_blocksize = ph->p_memsz;
1540 main_map->l_tls_align = ph->p_align;
1541 if (ph->p_align == 0)
1542 main_map->l_tls_firstbyte_offset = 0;
1543 else
1544 main_map->l_tls_firstbyte_offset = (ph->p_vaddr
1545 & (ph->p_align - 1));
1546 main_map->l_tls_initimage_size = ph->p_filesz;
1547 main_map->l_tls_initimage = (void *) ph->p_vaddr;
1549 /* This image gets the ID one. */
1550 GL(dl_tls_max_dtv_idx) = main_map->l_tls_modid = 1;
1552 break;
1554 case PT_GNU_STACK:
1555 GL(dl_stack_flags) = ph->p_flags;
1556 break;
1558 case PT_GNU_RELRO:
1559 main_map->l_relro_addr = ph->p_vaddr;
1560 main_map->l_relro_size = ph->p_memsz;
1561 break;
1563 /* Process program headers again, but scan them backwards so
1564 that PT_NOTE can be skipped if PT_GNU_PROPERTY exits. */
1565 for (ph = &phdr[phnum]; ph != phdr; --ph)
1566 switch (ph[-1].p_type)
1568 case PT_NOTE:
1569 _dl_process_pt_note (main_map, -1, &ph[-1]);
1570 break;
1571 case PT_GNU_PROPERTY:
1572 _dl_process_pt_gnu_property (main_map, -1, &ph[-1]);
1573 break;
1576 /* Adjust the address of the TLS initialization image in case
1577 the executable is actually an ET_DYN object. */
1578 if (main_map->l_tls_initimage != NULL)
1579 main_map->l_tls_initimage
1580 = (char *) main_map->l_tls_initimage + main_map->l_addr;
1581 if (! main_map->l_map_end)
1582 main_map->l_map_end = ~0;
1583 if (! main_map->l_text_end)
1584 main_map->l_text_end = ~0;
1585 if (! GL(dl_rtld_map).l_libname && GL(dl_rtld_map).l_name)
1587 /* We were invoked directly, so the program might not have a
1588 PT_INTERP. */
1589 _dl_rtld_libname.name = GL(dl_rtld_map).l_name;
1590 /* _dl_rtld_libname.next = NULL; Already zero. */
1591 GL(dl_rtld_map).l_libname = &_dl_rtld_libname;
1593 else
1594 assert (GL(dl_rtld_map).l_libname); /* How else did we get here? */
1596 /* If the current libname is different from the SONAME, add the
1597 latter as well. */
1598 if (GL(dl_rtld_map).l_info[DT_SONAME] != NULL
1599 && strcmp (GL(dl_rtld_map).l_libname->name,
1600 (const char *) D_PTR (&GL(dl_rtld_map), l_info[DT_STRTAB])
1601 + GL(dl_rtld_map).l_info[DT_SONAME]->d_un.d_val) != 0)
1603 static struct libname_list newname;
1604 newname.name = ((char *) D_PTR (&GL(dl_rtld_map), l_info[DT_STRTAB])
1605 + GL(dl_rtld_map).l_info[DT_SONAME]->d_un.d_ptr);
1606 newname.next = NULL;
1607 newname.dont_free = 1;
1609 assert (GL(dl_rtld_map).l_libname->next == NULL);
1610 GL(dl_rtld_map).l_libname->next = &newname;
1612 /* The ld.so must be relocated since otherwise loading audit modules
1613 will fail since they reuse the very same ld.so. */
1614 assert (GL(dl_rtld_map).l_relocated);
1616 if (! rtld_is_main)
1618 /* Extract the contents of the dynamic section for easy access. */
1619 elf_get_dynamic_info (main_map);
1621 /* If the main map is libc.so, update the base namespace to
1622 refer to this map. If libc.so is loaded later, this happens
1623 in _dl_map_object_from_fd. */
1624 if (main_map->l_info[DT_SONAME] != NULL
1625 && (strcmp (((const char *) D_PTR (main_map, l_info[DT_STRTAB])
1626 + main_map->l_info[DT_SONAME]->d_un.d_val), LIBC_SO)
1627 == 0))
1628 GL(dl_ns)[LM_ID_BASE].libc_map = main_map;
1630 /* Set up our cache of pointers into the hash table. */
1631 _dl_setup_hash (main_map);
1634 if (__glibc_unlikely (state.mode == rtld_mode_verify))
1636 /* We were called just to verify that this is a dynamic
1637 executable using us as the program interpreter. Exit with an
1638 error if we were not able to load the binary or no interpreter
1639 is specified (i.e., this is no dynamically linked binary. */
1640 if (main_map->l_ld == NULL)
1641 _exit (1);
1643 /* We allow here some platform specific code. */
1644 #ifdef DISTINGUISH_LIB_VERSIONS
1645 DISTINGUISH_LIB_VERSIONS;
1646 #endif
1647 _exit (has_interp ? 0 : 2);
1650 struct link_map **first_preload = &GL(dl_rtld_map).l_next;
1651 /* Set up the data structures for the system-supplied DSO early,
1652 so they can influence _dl_init_paths. */
1653 setup_vdso (main_map, &first_preload);
1655 /* With vDSO setup we can initialize the function pointers. */
1656 setup_vdso_pointers ();
1658 #ifdef DL_SYSDEP_OSCHECK
1659 DL_SYSDEP_OSCHECK (_dl_fatal_printf);
1660 #endif
1662 /* Initialize the data structures for the search paths for shared
1663 objects. */
1664 call_init_paths (&state);
1666 /* Initialize _r_debug_extended. */
1667 struct r_debug *r = _dl_debug_initialize (GL(dl_rtld_map).l_addr,
1668 LM_ID_BASE);
1669 r->r_state = RT_CONSISTENT;
1671 /* Put the link_map for ourselves on the chain so it can be found by
1672 name. Note that at this point the global chain of link maps contains
1673 exactly one element, which is pointed to by dl_loaded. */
1674 if (! GL(dl_rtld_map).l_name)
1675 /* If not invoked directly, the dynamic linker shared object file was
1676 found by the PT_INTERP name. */
1677 GL(dl_rtld_map).l_name = (char *) GL(dl_rtld_map).l_libname->name;
1678 GL(dl_rtld_map).l_type = lt_library;
1679 main_map->l_next = &GL(dl_rtld_map);
1680 GL(dl_rtld_map).l_prev = main_map;
1681 ++GL(dl_ns)[LM_ID_BASE]._ns_nloaded;
1682 ++GL(dl_load_adds);
1684 /* If LD_USE_LOAD_BIAS env variable has not been seen, default
1685 to not using bias for non-prelinked PIEs and libraries
1686 and using it for executables or prelinked PIEs or libraries. */
1687 if (GLRO(dl_use_load_bias) == (ElfW(Addr)) -2)
1688 GLRO(dl_use_load_bias) = main_map->l_addr == 0 ? -1 : 0;
1690 /* Starting from binutils-2.23, the linker will define the magic symbol
1691 __ehdr_start to point to our own ELF header if it is visible in a
1692 segment that also includes the phdrs. If that's not available, we use
1693 the old method that assumes the beginning of the file is part of the
1694 lowest-addressed PT_LOAD segment. */
1695 extern const ElfW(Ehdr) __ehdr_start __attribute__ ((visibility ("hidden")));
1697 /* Set up the program header information for the dynamic linker
1698 itself. It is needed in the dl_iterate_phdr callbacks. */
1699 const ElfW(Ehdr) *rtld_ehdr = &__ehdr_start;
1700 assert (rtld_ehdr->e_ehsize == sizeof *rtld_ehdr);
1701 assert (rtld_ehdr->e_phentsize == sizeof (ElfW(Phdr)));
1703 const ElfW(Phdr) *rtld_phdr = (const void *) rtld_ehdr + rtld_ehdr->e_phoff;
1705 GL(dl_rtld_map).l_phdr = rtld_phdr;
1706 GL(dl_rtld_map).l_phnum = rtld_ehdr->e_phnum;
1709 /* PT_GNU_RELRO is usually the last phdr. */
1710 size_t cnt = rtld_ehdr->e_phnum;
1711 while (cnt-- > 0)
1712 if (rtld_phdr[cnt].p_type == PT_GNU_RELRO)
1714 GL(dl_rtld_map).l_relro_addr = rtld_phdr[cnt].p_vaddr;
1715 GL(dl_rtld_map).l_relro_size = rtld_phdr[cnt].p_memsz;
1716 break;
1719 /* Add the dynamic linker to the TLS list if it also uses TLS. */
1720 if (GL(dl_rtld_map).l_tls_blocksize != 0)
1721 /* Assign a module ID. Do this before loading any audit modules. */
1722 _dl_assign_tls_modid (&GL(dl_rtld_map));
1724 audit_list_add_dynamic_tag (&state.audit_list, main_map, DT_AUDIT);
1725 audit_list_add_dynamic_tag (&state.audit_list, main_map, DT_DEPAUDIT);
1727 /* At this point, all data has been obtained that is included in the
1728 --help output. */
1729 if (__glibc_unlikely (state.mode == rtld_mode_help))
1730 _dl_help (ld_so_name, &state);
1732 /* If we have auditing DSOs to load, do it now. */
1733 bool need_security_init = true;
1734 if (state.audit_list.length > 0)
1736 size_t naudit = audit_list_count (&state.audit_list);
1738 /* Since we start using the auditing DSOs right away we need to
1739 initialize the data structures now. */
1740 tcbp = init_tls (naudit);
1742 /* Initialize security features. We need to do it this early
1743 since otherwise the constructors of the audit libraries will
1744 use different values (especially the pointer guard) and will
1745 fail later on. */
1746 security_init ();
1747 need_security_init = false;
1749 load_audit_modules (main_map, &state.audit_list);
1751 /* The count based on audit strings may overestimate the number
1752 of audit modules that got loaded, but not underestimate. */
1753 assert (GLRO(dl_naudit) <= naudit);
1756 /* Keep track of the currently loaded modules to count how many
1757 non-audit modules which use TLS are loaded. */
1758 size_t count_modids = _dl_count_modids ();
1760 /* Set up debugging before the debugger is notified for the first time. */
1761 #ifdef ELF_MACHINE_DEBUG_SETUP
1762 /* Some machines (e.g. MIPS) don't use DT_DEBUG in this way. */
1763 ELF_MACHINE_DEBUG_SETUP (main_map, r);
1764 ELF_MACHINE_DEBUG_SETUP (&GL(dl_rtld_map), r);
1765 #else
1766 if (main_map->l_info[DT_DEBUG] != NULL)
1767 /* There is a DT_DEBUG entry in the dynamic section. Fill it in
1768 with the run-time address of the r_debug structure */
1769 main_map->l_info[DT_DEBUG]->d_un.d_ptr = (ElfW(Addr)) r;
1771 /* Fill in the pointer in the dynamic linker's own dynamic section, in
1772 case you run gdb on the dynamic linker directly. */
1773 if (GL(dl_rtld_map).l_info[DT_DEBUG] != NULL)
1774 GL(dl_rtld_map).l_info[DT_DEBUG]->d_un.d_ptr = (ElfW(Addr)) r;
1775 #endif
1777 /* We start adding objects. */
1778 r->r_state = RT_ADD;
1779 _dl_debug_state ();
1780 LIBC_PROBE (init_start, 2, LM_ID_BASE, r);
1782 /* Auditing checkpoint: we are ready to signal that the initial map
1783 is being constructed. */
1784 if (__glibc_unlikely (GLRO(dl_naudit) > 0))
1786 struct audit_ifaces *afct = GLRO(dl_audit);
1787 for (unsigned int cnt = 0; cnt < GLRO(dl_naudit); ++cnt)
1789 if (afct->activity != NULL)
1790 afct->activity (&link_map_audit_state (main_map, cnt)->cookie,
1791 LA_ACT_ADD);
1793 afct = afct->next;
1797 /* We have two ways to specify objects to preload: via environment
1798 variable and via the file /etc/ld.so.preload. The latter can also
1799 be used when security is enabled. */
1800 assert (*first_preload == NULL);
1801 struct link_map **preloads = NULL;
1802 unsigned int npreloads = 0;
1804 if (__glibc_unlikely (state.preloadlist != NULL))
1806 RTLD_TIMING_VAR (start);
1807 rtld_timer_start (&start);
1808 npreloads += handle_preload_list (state.preloadlist, main_map,
1809 "LD_PRELOAD");
1810 rtld_timer_accum (&load_time, start);
1813 if (__glibc_unlikely (state.preloadarg != NULL))
1815 RTLD_TIMING_VAR (start);
1816 rtld_timer_start (&start);
1817 npreloads += handle_preload_list (state.preloadarg, main_map,
1818 "--preload");
1819 rtld_timer_accum (&load_time, start);
1822 /* There usually is no ld.so.preload file, it should only be used
1823 for emergencies and testing. So the open call etc should usually
1824 fail. Using access() on a non-existing file is faster than using
1825 open(). So we do this first. If it succeeds we do almost twice
1826 the work but this does not matter, since it is not for production
1827 use. */
1828 static const char preload_file[] = "/etc/ld.so.preload";
1829 if (__glibc_unlikely (__access (preload_file, R_OK) == 0))
1831 /* Read the contents of the file. */
1832 file = _dl_sysdep_read_whole_file (preload_file, &file_size,
1833 PROT_READ | PROT_WRITE);
1834 if (__glibc_unlikely (file != MAP_FAILED))
1836 /* Parse the file. It contains names of libraries to be loaded,
1837 separated by white spaces or `:'. It may also contain
1838 comments introduced by `#'. */
1839 char *problem;
1840 char *runp;
1841 size_t rest;
1843 /* Eliminate comments. */
1844 runp = file;
1845 rest = file_size;
1846 while (rest > 0)
1848 char *comment = memchr (runp, '#', rest);
1849 if (comment == NULL)
1850 break;
1852 rest -= comment - runp;
1854 *comment = ' ';
1855 while (--rest > 0 && *++comment != '\n');
1858 /* We have one problematic case: if we have a name at the end of
1859 the file without a trailing terminating characters, we cannot
1860 place the \0. Handle the case separately. */
1861 if (file[file_size - 1] != ' ' && file[file_size - 1] != '\t'
1862 && file[file_size - 1] != '\n' && file[file_size - 1] != ':')
1864 problem = &file[file_size];
1865 while (problem > file && problem[-1] != ' '
1866 && problem[-1] != '\t'
1867 && problem[-1] != '\n' && problem[-1] != ':')
1868 --problem;
1870 if (problem > file)
1871 problem[-1] = '\0';
1873 else
1875 problem = NULL;
1876 file[file_size - 1] = '\0';
1879 RTLD_TIMING_VAR (start);
1880 rtld_timer_start (&start);
1882 if (file != problem)
1884 char *p;
1885 runp = file;
1886 while ((p = strsep (&runp, ": \t\n")) != NULL)
1887 if (p[0] != '\0')
1888 npreloads += do_preload (p, main_map, preload_file);
1891 if (problem != NULL)
1893 char *p = strndupa (problem, file_size - (problem - file));
1895 npreloads += do_preload (p, main_map, preload_file);
1898 rtld_timer_accum (&load_time, start);
1900 /* We don't need the file anymore. */
1901 __munmap (file, file_size);
1905 if (__glibc_unlikely (*first_preload != NULL))
1907 /* Set up PRELOADS with a vector of the preloaded libraries. */
1908 struct link_map *l = *first_preload;
1909 preloads = __alloca (npreloads * sizeof preloads[0]);
1910 i = 0;
1913 preloads[i++] = l;
1914 l = l->l_next;
1915 } while (l);
1916 assert (i == npreloads);
1919 /* Load all the libraries specified by DT_NEEDED entries. If LD_PRELOAD
1920 specified some libraries to load, these are inserted before the actual
1921 dependencies in the executable's searchlist for symbol resolution. */
1923 RTLD_TIMING_VAR (start);
1924 rtld_timer_start (&start);
1925 _dl_map_object_deps (main_map, preloads, npreloads,
1926 state.mode == rtld_mode_trace, 0);
1927 rtld_timer_accum (&load_time, start);
1930 /* Mark all objects as being in the global scope. */
1931 for (i = main_map->l_searchlist.r_nlist; i > 0; )
1932 main_map->l_searchlist.r_list[--i]->l_global = 1;
1934 /* Remove _dl_rtld_map from the chain. */
1935 GL(dl_rtld_map).l_prev->l_next = GL(dl_rtld_map).l_next;
1936 if (GL(dl_rtld_map).l_next != NULL)
1937 GL(dl_rtld_map).l_next->l_prev = GL(dl_rtld_map).l_prev;
1939 for (i = 1; i < main_map->l_searchlist.r_nlist; ++i)
1940 if (main_map->l_searchlist.r_list[i] == &GL(dl_rtld_map))
1941 break;
1943 bool rtld_multiple_ref = false;
1944 if (__glibc_likely (i < main_map->l_searchlist.r_nlist))
1946 /* Some DT_NEEDED entry referred to the interpreter object itself, so
1947 put it back in the list of visible objects. We insert it into the
1948 chain in symbol search order because gdb uses the chain's order as
1949 its symbol search order. */
1950 rtld_multiple_ref = true;
1952 GL(dl_rtld_map).l_prev = main_map->l_searchlist.r_list[i - 1];
1953 if (__glibc_likely (state.mode == rtld_mode_normal))
1955 GL(dl_rtld_map).l_next = (i + 1 < main_map->l_searchlist.r_nlist
1956 ? main_map->l_searchlist.r_list[i + 1]
1957 : NULL);
1958 #ifdef NEED_DL_SYSINFO_DSO
1959 if (GLRO(dl_sysinfo_map) != NULL
1960 && GL(dl_rtld_map).l_prev->l_next == GLRO(dl_sysinfo_map)
1961 && GL(dl_rtld_map).l_next != GLRO(dl_sysinfo_map))
1962 GL(dl_rtld_map).l_prev = GLRO(dl_sysinfo_map);
1963 #endif
1965 else
1966 /* In trace mode there might be an invisible object (which we
1967 could not find) after the previous one in the search list.
1968 In this case it doesn't matter much where we put the
1969 interpreter object, so we just initialize the list pointer so
1970 that the assertion below holds. */
1971 GL(dl_rtld_map).l_next = GL(dl_rtld_map).l_prev->l_next;
1973 assert (GL(dl_rtld_map).l_prev->l_next == GL(dl_rtld_map).l_next);
1974 GL(dl_rtld_map).l_prev->l_next = &GL(dl_rtld_map);
1975 if (GL(dl_rtld_map).l_next != NULL)
1977 assert (GL(dl_rtld_map).l_next->l_prev == GL(dl_rtld_map).l_prev);
1978 GL(dl_rtld_map).l_next->l_prev = &GL(dl_rtld_map);
1982 /* Now let us see whether all libraries are available in the
1983 versions we need. */
1985 struct version_check_args args;
1986 args.doexit = state.mode == rtld_mode_normal;
1987 args.dotrace = state.mode == rtld_mode_trace;
1988 _dl_receive_error (print_missing_version, version_check_doit, &args);
1991 /* We do not initialize any of the TLS functionality unless any of the
1992 initial modules uses TLS. This makes dynamic loading of modules with
1993 TLS impossible, but to support it requires either eagerly doing setup
1994 now or lazily doing it later. Doing it now makes us incompatible with
1995 an old kernel that can't perform TLS_INIT_TP, even if no TLS is ever
1996 used. Trying to do it lazily is too hairy to try when there could be
1997 multiple threads (from a non-TLS-using libpthread). */
1998 bool was_tls_init_tp_called = tls_init_tp_called;
1999 if (tcbp == NULL)
2000 tcbp = init_tls (0);
2002 if (__glibc_likely (need_security_init))
2003 /* Initialize security features. But only if we have not done it
2004 earlier. */
2005 security_init ();
2007 if (__glibc_unlikely (state.mode != rtld_mode_normal))
2009 /* We were run just to list the shared libraries. It is
2010 important that we do this before real relocation, because the
2011 functions we call below for output may no longer work properly
2012 after relocation. */
2013 struct link_map *l;
2015 if (GLRO(dl_debug_mask) & DL_DEBUG_PRELINK)
2017 struct r_scope_elem *scope = &main_map->l_searchlist;
2019 for (i = 0; i < scope->r_nlist; i++)
2021 l = scope->r_list [i];
2022 if (l->l_faked)
2024 _dl_printf ("\t%s => not found\n", l->l_libname->name);
2025 continue;
2027 if (_dl_name_match_p (GLRO(dl_trace_prelink), l))
2028 GLRO(dl_trace_prelink_map) = l;
2029 _dl_printf ("\t%s => %s (0x%0*Zx, 0x%0*Zx)",
2030 DSO_FILENAME (l->l_libname->name),
2031 DSO_FILENAME (l->l_name),
2032 (int) sizeof l->l_map_start * 2,
2033 (size_t) l->l_map_start,
2034 (int) sizeof l->l_addr * 2,
2035 (size_t) l->l_addr);
2037 if (l->l_tls_modid)
2038 _dl_printf (" TLS(0x%Zx, 0x%0*Zx)\n", l->l_tls_modid,
2039 (int) sizeof l->l_tls_offset * 2,
2040 (size_t) l->l_tls_offset);
2041 else
2042 _dl_printf ("\n");
2045 else if (GLRO(dl_debug_mask) & DL_DEBUG_UNUSED)
2047 /* Look through the dependencies of the main executable
2048 and determine which of them is not actually
2049 required. */
2050 struct link_map *l = main_map;
2052 /* Relocate the main executable. */
2053 struct relocate_args args = { .l = l,
2054 .reloc_mode = ((GLRO(dl_lazy)
2055 ? RTLD_LAZY : 0)
2056 | __RTLD_NOIFUNC) };
2057 _dl_receive_error (print_unresolved, relocate_doit, &args);
2059 /* This loop depends on the dependencies of the executable to
2060 correspond in number and order to the DT_NEEDED entries. */
2061 ElfW(Dyn) *dyn = main_map->l_ld;
2062 bool first = true;
2063 while (dyn->d_tag != DT_NULL)
2065 if (dyn->d_tag == DT_NEEDED)
2067 l = l->l_next;
2068 #ifdef NEED_DL_SYSINFO_DSO
2069 /* Skip the VDSO since it's not part of the list
2070 of objects we brought in via DT_NEEDED entries. */
2071 if (l == GLRO(dl_sysinfo_map))
2072 l = l->l_next;
2073 #endif
2074 if (!l->l_used)
2076 if (first)
2078 _dl_printf ("Unused direct dependencies:\n");
2079 first = false;
2082 _dl_printf ("\t%s\n", l->l_name);
2086 ++dyn;
2089 _exit (first != true);
2091 else if (! main_map->l_info[DT_NEEDED])
2092 _dl_printf ("\tstatically linked\n");
2093 else
2095 for (l = main_map->l_next; l; l = l->l_next)
2096 if (l->l_faked)
2097 /* The library was not found. */
2098 _dl_printf ("\t%s => not found\n", l->l_libname->name);
2099 else if (strcmp (l->l_libname->name, l->l_name) == 0)
2100 _dl_printf ("\t%s (0x%0*Zx)\n", l->l_libname->name,
2101 (int) sizeof l->l_map_start * 2,
2102 (size_t) l->l_map_start);
2103 else
2104 _dl_printf ("\t%s => %s (0x%0*Zx)\n", l->l_libname->name,
2105 l->l_name, (int) sizeof l->l_map_start * 2,
2106 (size_t) l->l_map_start);
2109 if (__glibc_unlikely (state.mode != rtld_mode_trace))
2110 for (i = 1; i < (unsigned int) _dl_argc; ++i)
2112 const ElfW(Sym) *ref = NULL;
2113 ElfW(Addr) loadbase;
2114 lookup_t result;
2116 result = _dl_lookup_symbol_x (_dl_argv[i], main_map,
2117 &ref, main_map->l_scope,
2118 NULL, ELF_RTYPE_CLASS_PLT,
2119 DL_LOOKUP_ADD_DEPENDENCY, NULL);
2121 loadbase = LOOKUP_VALUE_ADDRESS (result, false);
2123 _dl_printf ("%s found at 0x%0*Zd in object at 0x%0*Zd\n",
2124 _dl_argv[i],
2125 (int) sizeof ref->st_value * 2,
2126 (size_t) ref->st_value,
2127 (int) sizeof loadbase * 2, (size_t) loadbase);
2129 else
2131 /* If LD_WARN is set, warn about undefined symbols. */
2132 if (GLRO(dl_lazy) >= 0 && GLRO(dl_verbose))
2134 /* We have to do symbol dependency testing. */
2135 struct relocate_args args;
2136 unsigned int i;
2138 args.reloc_mode = ((GLRO(dl_lazy) ? RTLD_LAZY : 0)
2139 | __RTLD_NOIFUNC);
2141 i = main_map->l_searchlist.r_nlist;
2142 while (i-- > 0)
2144 struct link_map *l = main_map->l_initfini[i];
2145 if (l != &GL(dl_rtld_map) && ! l->l_faked)
2147 args.l = l;
2148 _dl_receive_error (print_unresolved, relocate_doit,
2149 &args);
2153 if ((GLRO(dl_debug_mask) & DL_DEBUG_PRELINK)
2154 && rtld_multiple_ref)
2156 /* Mark the link map as not yet relocated again. */
2157 GL(dl_rtld_map).l_relocated = 0;
2158 _dl_relocate_object (&GL(dl_rtld_map),
2159 main_map->l_scope, __RTLD_NOIFUNC, 0);
2162 #define VERNEEDTAG (DT_NUM + DT_THISPROCNUM + DT_VERSIONTAGIDX (DT_VERNEED))
2163 if (state.version_info)
2165 /* Print more information. This means here, print information
2166 about the versions needed. */
2167 int first = 1;
2168 struct link_map *map;
2170 for (map = main_map; map != NULL; map = map->l_next)
2172 const char *strtab;
2173 ElfW(Dyn) *dyn = map->l_info[VERNEEDTAG];
2174 ElfW(Verneed) *ent;
2176 if (dyn == NULL)
2177 continue;
2179 strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]);
2180 ent = (ElfW(Verneed) *) (map->l_addr + dyn->d_un.d_ptr);
2182 if (first)
2184 _dl_printf ("\n\tVersion information:\n");
2185 first = 0;
2188 _dl_printf ("\t%s:\n", DSO_FILENAME (map->l_name));
2190 while (1)
2192 ElfW(Vernaux) *aux;
2193 struct link_map *needed;
2195 needed = find_needed (strtab + ent->vn_file);
2196 aux = (ElfW(Vernaux) *) ((char *) ent + ent->vn_aux);
2198 while (1)
2200 const char *fname = NULL;
2202 if (needed != NULL
2203 && match_version (strtab + aux->vna_name,
2204 needed))
2205 fname = needed->l_name;
2207 _dl_printf ("\t\t%s (%s) %s=> %s\n",
2208 strtab + ent->vn_file,
2209 strtab + aux->vna_name,
2210 aux->vna_flags & VER_FLG_WEAK
2211 ? "[WEAK] " : "",
2212 fname ?: "not found");
2214 if (aux->vna_next == 0)
2215 /* No more symbols. */
2216 break;
2218 /* Next symbol. */
2219 aux = (ElfW(Vernaux) *) ((char *) aux
2220 + aux->vna_next);
2223 if (ent->vn_next == 0)
2224 /* No more dependencies. */
2225 break;
2227 /* Next dependency. */
2228 ent = (ElfW(Verneed) *) ((char *) ent + ent->vn_next);
2234 _exit (0);
2237 if (main_map->l_info[ADDRIDX (DT_GNU_LIBLIST)]
2238 && ! __builtin_expect (GLRO(dl_profile) != NULL, 0)
2239 && ! __builtin_expect (GLRO(dl_dynamic_weak), 0))
2241 ElfW(Lib) *liblist, *liblistend;
2242 struct link_map **r_list, **r_listend, *l;
2243 const char *strtab = (const void *) D_PTR (main_map, l_info[DT_STRTAB]);
2245 assert (main_map->l_info[VALIDX (DT_GNU_LIBLISTSZ)] != NULL);
2246 liblist = (ElfW(Lib) *)
2247 main_map->l_info[ADDRIDX (DT_GNU_LIBLIST)]->d_un.d_ptr;
2248 liblistend = (ElfW(Lib) *)
2249 ((char *) liblist
2250 + main_map->l_info[VALIDX (DT_GNU_LIBLISTSZ)]->d_un.d_val);
2251 r_list = main_map->l_searchlist.r_list;
2252 r_listend = r_list + main_map->l_searchlist.r_nlist;
2254 for (; r_list < r_listend && liblist < liblistend; r_list++)
2256 l = *r_list;
2258 if (l == main_map)
2259 continue;
2261 /* If the library is not mapped where it should, fail. */
2262 if (l->l_addr)
2263 break;
2265 /* Next, check if checksum matches. */
2266 if (l->l_info [VALIDX(DT_CHECKSUM)] == NULL
2267 || l->l_info [VALIDX(DT_CHECKSUM)]->d_un.d_val
2268 != liblist->l_checksum)
2269 break;
2271 if (l->l_info [VALIDX(DT_GNU_PRELINKED)] == NULL
2272 || l->l_info [VALIDX(DT_GNU_PRELINKED)]->d_un.d_val
2273 != liblist->l_time_stamp)
2274 break;
2276 if (! _dl_name_match_p (strtab + liblist->l_name, l))
2277 break;
2279 ++liblist;
2283 if (r_list == r_listend && liblist == liblistend)
2284 prelinked = true;
2286 if (__glibc_unlikely (GLRO(dl_debug_mask) & DL_DEBUG_LIBS))
2287 _dl_debug_printf ("\nprelink checking: %s\n",
2288 prelinked ? "ok" : "failed");
2292 /* Now set up the variable which helps the assembler startup code. */
2293 GL(dl_ns)[LM_ID_BASE]._ns_main_searchlist = &main_map->l_searchlist;
2295 /* Save the information about the original global scope list since
2296 we need it in the memory handling later. */
2297 GLRO(dl_initial_searchlist) = *GL(dl_ns)[LM_ID_BASE]._ns_main_searchlist;
2299 /* Remember the last search directory added at startup, now that
2300 malloc will no longer be the one from dl-minimal.c. As a side
2301 effect, this marks ld.so as initialized, so that the rtld_active
2302 function returns true from now on. */
2303 GLRO(dl_init_all_dirs) = GL(dl_all_dirs);
2305 /* Print scope information. */
2306 if (__glibc_unlikely (GLRO(dl_debug_mask) & DL_DEBUG_SCOPES))
2308 _dl_debug_printf ("\nInitial object scopes\n");
2310 for (struct link_map *l = main_map; l != NULL; l = l->l_next)
2311 _dl_show_scope (l, 0);
2314 _rtld_main_check (main_map, _dl_argv[0]);
2316 if (prelinked)
2318 if (main_map->l_info [ADDRIDX (DT_GNU_CONFLICT)] != NULL)
2320 ElfW(Rela) *conflict, *conflictend;
2322 RTLD_TIMING_VAR (start);
2323 rtld_timer_start (&start);
2325 assert (main_map->l_info [VALIDX (DT_GNU_CONFLICTSZ)] != NULL);
2326 conflict = (ElfW(Rela) *)
2327 main_map->l_info [ADDRIDX (DT_GNU_CONFLICT)]->d_un.d_ptr;
2328 conflictend = (ElfW(Rela) *)
2329 ((char *) conflict
2330 + main_map->l_info [VALIDX (DT_GNU_CONFLICTSZ)]->d_un.d_val);
2331 _dl_resolve_conflicts (main_map, conflict, conflictend);
2333 rtld_timer_stop (&relocate_time, start);
2336 /* The library defining malloc has already been relocated due to
2337 prelinking. Resolve the malloc symbols for the dynamic
2338 loader. */
2339 __rtld_malloc_init_real (main_map);
2341 /* Likewise for the locking implementation. */
2342 __rtld_mutex_init ();
2344 /* Mark all the objects so we know they have been already relocated. */
2345 for (struct link_map *l = main_map; l != NULL; l = l->l_next)
2347 l->l_relocated = 1;
2348 if (l->l_relro_size)
2349 _dl_protect_relro (l);
2351 /* Add object to slot information data if necessasy. */
2352 if (l->l_tls_blocksize != 0 && tls_init_tp_called)
2353 _dl_add_to_slotinfo (l, true);
2356 else
2358 /* Now we have all the objects loaded. Relocate them all except for
2359 the dynamic linker itself. We do this in reverse order so that copy
2360 relocs of earlier objects overwrite the data written by later
2361 objects. We do not re-relocate the dynamic linker itself in this
2362 loop because that could result in the GOT entries for functions we
2363 call being changed, and that would break us. It is safe to relocate
2364 the dynamic linker out of order because it has no copy relocs (we
2365 know that because it is self-contained). */
2367 int consider_profiling = GLRO(dl_profile) != NULL;
2369 /* If we are profiling we also must do lazy reloaction. */
2370 GLRO(dl_lazy) |= consider_profiling;
2372 RTLD_TIMING_VAR (start);
2373 rtld_timer_start (&start);
2374 unsigned i = main_map->l_searchlist.r_nlist;
2375 while (i-- > 0)
2377 struct link_map *l = main_map->l_initfini[i];
2379 /* While we are at it, help the memory handling a bit. We have to
2380 mark some data structures as allocated with the fake malloc()
2381 implementation in ld.so. */
2382 struct libname_list *lnp = l->l_libname->next;
2384 while (__builtin_expect (lnp != NULL, 0))
2386 lnp->dont_free = 1;
2387 lnp = lnp->next;
2389 /* Also allocated with the fake malloc(). */
2390 l->l_free_initfini = 0;
2392 if (l != &GL(dl_rtld_map))
2393 _dl_relocate_object (l, l->l_scope, GLRO(dl_lazy) ? RTLD_LAZY : 0,
2394 consider_profiling);
2396 /* Add object to slot information data if necessasy. */
2397 if (l->l_tls_blocksize != 0 && tls_init_tp_called)
2398 _dl_add_to_slotinfo (l, true);
2400 rtld_timer_stop (&relocate_time, start);
2402 /* Now enable profiling if needed. Like the previous call,
2403 this has to go here because the calls it makes should use the
2404 rtld versions of the functions (particularly calloc()), but it
2405 needs to have _dl_profile_map set up by the relocator. */
2406 if (__glibc_unlikely (GL(dl_profile_map) != NULL))
2407 /* We must prepare the profiling. */
2408 _dl_start_profile ();
2411 if ((!was_tls_init_tp_called && GL(dl_tls_max_dtv_idx) > 0)
2412 || count_modids != _dl_count_modids ())
2413 ++GL(dl_tls_generation);
2415 /* Now that we have completed relocation, the initializer data
2416 for the TLS blocks has its final values and we can copy them
2417 into the main thread's TLS area, which we allocated above.
2418 Note: thread-local variables must only be accessed after completing
2419 the next step. */
2420 _dl_allocate_tls_init (tcbp);
2422 /* And finally install it for the main thread. */
2423 if (! tls_init_tp_called)
2425 const char *lossage = TLS_INIT_TP (tcbp);
2426 if (__glibc_unlikely (lossage != NULL))
2427 _dl_fatal_printf ("cannot set up thread-local storage: %s\n",
2428 lossage);
2429 __tls_init_tp ();
2432 /* Make sure no new search directories have been added. */
2433 assert (GLRO(dl_init_all_dirs) == GL(dl_all_dirs));
2435 if (! prelinked && rtld_multiple_ref)
2437 /* There was an explicit ref to the dynamic linker as a shared lib.
2438 Re-relocate ourselves with user-controlled symbol definitions.
2440 We must do this after TLS initialization in case after this
2441 re-relocation, we might call a user-supplied function
2442 (e.g. calloc from _dl_relocate_object) that uses TLS data. */
2444 /* The malloc implementation has been relocated, so resolving
2445 its symbols (and potentially calling IFUNC resolvers) is safe
2446 at this point. */
2447 __rtld_malloc_init_real (main_map);
2449 /* Likewise for the locking implementation. */
2450 __rtld_mutex_init ();
2452 RTLD_TIMING_VAR (start);
2453 rtld_timer_start (&start);
2455 /* Mark the link map as not yet relocated again. */
2456 GL(dl_rtld_map).l_relocated = 0;
2457 _dl_relocate_object (&GL(dl_rtld_map), main_map->l_scope, 0, 0);
2459 rtld_timer_accum (&relocate_time, start);
2462 /* Relocation is complete. Perform early libc initialization. This
2463 is the initial libc, even if audit modules have been loaded with
2464 other libcs. */
2465 _dl_call_libc_early_init (GL(dl_ns)[LM_ID_BASE].libc_map, true);
2467 /* Do any necessary cleanups for the startup OS interface code.
2468 We do these now so that no calls are made after rtld re-relocation
2469 which might be resolved to different functions than we expect.
2470 We cannot do this before relocating the other objects because
2471 _dl_relocate_object might need to call `mprotect' for DT_TEXTREL. */
2472 _dl_sysdep_start_cleanup ();
2474 #ifdef SHARED
2475 /* Auditing checkpoint: we have added all objects. */
2476 if (__glibc_unlikely (GLRO(dl_naudit) > 0))
2478 struct link_map *head = GL(dl_ns)[LM_ID_BASE]._ns_loaded;
2479 /* Do not call the functions for any auditing object. */
2480 if (head->l_auditing == 0)
2482 struct audit_ifaces *afct = GLRO(dl_audit);
2483 for (unsigned int cnt = 0; cnt < GLRO(dl_naudit); ++cnt)
2485 if (afct->activity != NULL)
2486 afct->activity (&link_map_audit_state (head, cnt)->cookie,
2487 LA_ACT_CONSISTENT);
2489 afct = afct->next;
2493 #endif
2495 /* Notify the debugger all new objects are now ready to go. We must re-get
2496 the address since by now the variable might be in another object. */
2497 r = _dl_debug_update (LM_ID_BASE);
2498 r->r_state = RT_CONSISTENT;
2499 _dl_debug_state ();
2500 LIBC_PROBE (init_complete, 2, LM_ID_BASE, r);
2502 #if defined USE_LDCONFIG && !defined MAP_COPY
2503 /* We must munmap() the cache file. */
2504 _dl_unload_cache ();
2505 #endif
2507 /* Once we return, _dl_sysdep_start will invoke
2508 the DT_INIT functions and then *USER_ENTRY. */
2511 /* This is a little helper function for resolving symbols while
2512 tracing the binary. */
2513 static void
2514 print_unresolved (int errcode __attribute__ ((unused)), const char *objname,
2515 const char *errstring)
2517 if (objname[0] == '\0')
2518 objname = RTLD_PROGNAME;
2519 _dl_error_printf ("%s (%s)\n", errstring, objname);
2522 /* This is a little helper function for resolving symbols while
2523 tracing the binary. */
2524 static void
2525 print_missing_version (int errcode __attribute__ ((unused)),
2526 const char *objname, const char *errstring)
2528 _dl_error_printf ("%s: %s: %s\n", RTLD_PROGNAME,
2529 objname, errstring);
2532 /* Process the string given as the parameter which explains which debugging
2533 options are enabled. */
2534 static void
2535 process_dl_debug (struct dl_main_state *state, const char *dl_debug)
2537 /* When adding new entries make sure that the maximal length of a name
2538 is correctly handled in the LD_DEBUG_HELP code below. */
2539 static const struct
2541 unsigned char len;
2542 const char name[10];
2543 const char helptext[41];
2544 unsigned short int mask;
2545 } debopts[] =
2547 #define LEN_AND_STR(str) sizeof (str) - 1, str
2548 { LEN_AND_STR ("libs"), "display library search paths",
2549 DL_DEBUG_LIBS | DL_DEBUG_IMPCALLS },
2550 { LEN_AND_STR ("reloc"), "display relocation processing",
2551 DL_DEBUG_RELOC | DL_DEBUG_IMPCALLS },
2552 { LEN_AND_STR ("files"), "display progress for input file",
2553 DL_DEBUG_FILES | DL_DEBUG_IMPCALLS },
2554 { LEN_AND_STR ("symbols"), "display symbol table processing",
2555 DL_DEBUG_SYMBOLS | DL_DEBUG_IMPCALLS },
2556 { LEN_AND_STR ("bindings"), "display information about symbol binding",
2557 DL_DEBUG_BINDINGS | DL_DEBUG_IMPCALLS },
2558 { LEN_AND_STR ("versions"), "display version dependencies",
2559 DL_DEBUG_VERSIONS | DL_DEBUG_IMPCALLS },
2560 { LEN_AND_STR ("scopes"), "display scope information",
2561 DL_DEBUG_SCOPES },
2562 { LEN_AND_STR ("all"), "all previous options combined",
2563 DL_DEBUG_LIBS | DL_DEBUG_RELOC | DL_DEBUG_FILES | DL_DEBUG_SYMBOLS
2564 | DL_DEBUG_BINDINGS | DL_DEBUG_VERSIONS | DL_DEBUG_IMPCALLS
2565 | DL_DEBUG_SCOPES },
2566 { LEN_AND_STR ("statistics"), "display relocation statistics",
2567 DL_DEBUG_STATISTICS },
2568 { LEN_AND_STR ("unused"), "determined unused DSOs",
2569 DL_DEBUG_UNUSED },
2570 { LEN_AND_STR ("help"), "display this help message and exit",
2571 DL_DEBUG_HELP },
2573 #define ndebopts (sizeof (debopts) / sizeof (debopts[0]))
2575 /* Skip separating white spaces and commas. */
2576 while (*dl_debug != '\0')
2578 if (*dl_debug != ' ' && *dl_debug != ',' && *dl_debug != ':')
2580 size_t cnt;
2581 size_t len = 1;
2583 while (dl_debug[len] != '\0' && dl_debug[len] != ' '
2584 && dl_debug[len] != ',' && dl_debug[len] != ':')
2585 ++len;
2587 for (cnt = 0; cnt < ndebopts; ++cnt)
2588 if (debopts[cnt].len == len
2589 && memcmp (dl_debug, debopts[cnt].name, len) == 0)
2591 GLRO(dl_debug_mask) |= debopts[cnt].mask;
2592 state->any_debug = true;
2593 break;
2596 if (cnt == ndebopts)
2598 /* Display a warning and skip everything until next
2599 separator. */
2600 char *copy = strndupa (dl_debug, len);
2601 _dl_error_printf ("\
2602 warning: debug option `%s' unknown; try LD_DEBUG=help\n", copy);
2605 dl_debug += len;
2606 continue;
2609 ++dl_debug;
2612 if (GLRO(dl_debug_mask) & DL_DEBUG_UNUSED)
2614 /* In order to get an accurate picture of whether a particular
2615 DT_NEEDED entry is actually used we have to process both
2616 the PLT and non-PLT relocation entries. */
2617 GLRO(dl_lazy) = 0;
2620 if (GLRO(dl_debug_mask) & DL_DEBUG_HELP)
2622 size_t cnt;
2624 _dl_printf ("\
2625 Valid options for the LD_DEBUG environment variable are:\n\n");
2627 for (cnt = 0; cnt < ndebopts; ++cnt)
2628 _dl_printf (" %.*s%s%s\n", debopts[cnt].len, debopts[cnt].name,
2629 " " + debopts[cnt].len - 3,
2630 debopts[cnt].helptext);
2632 _dl_printf ("\n\
2633 To direct the debugging output into a file instead of standard output\n\
2634 a filename can be specified using the LD_DEBUG_OUTPUT environment variable.\n");
2635 _exit (0);
2639 static void
2640 process_envvars (struct dl_main_state *state)
2642 char **runp = _environ;
2643 char *envline;
2644 char *debug_output = NULL;
2646 /* This is the default place for profiling data file. */
2647 GLRO(dl_profile_output)
2648 = &"/var/tmp\0/var/profile"[__libc_enable_secure ? 9 : 0];
2650 while ((envline = _dl_next_ld_env_entry (&runp)) != NULL)
2652 size_t len = 0;
2654 while (envline[len] != '\0' && envline[len] != '=')
2655 ++len;
2657 if (envline[len] != '=')
2658 /* This is a "LD_" variable at the end of the string without
2659 a '=' character. Ignore it since otherwise we will access
2660 invalid memory below. */
2661 continue;
2663 switch (len)
2665 case 4:
2666 /* Warning level, verbose or not. */
2667 if (memcmp (envline, "WARN", 4) == 0)
2668 GLRO(dl_verbose) = envline[5] != '\0';
2669 break;
2671 case 5:
2672 /* Debugging of the dynamic linker? */
2673 if (memcmp (envline, "DEBUG", 5) == 0)
2675 process_dl_debug (state, &envline[6]);
2676 break;
2678 if (memcmp (envline, "AUDIT", 5) == 0)
2679 audit_list_add_string (&state->audit_list, &envline[6]);
2680 break;
2682 case 7:
2683 /* Print information about versions. */
2684 if (memcmp (envline, "VERBOSE", 7) == 0)
2686 state->version_info = envline[8] != '\0';
2687 break;
2690 /* List of objects to be preloaded. */
2691 if (memcmp (envline, "PRELOAD", 7) == 0)
2693 state->preloadlist = &envline[8];
2694 break;
2697 /* Which shared object shall be profiled. */
2698 if (memcmp (envline, "PROFILE", 7) == 0 && envline[8] != '\0')
2699 GLRO(dl_profile) = &envline[8];
2700 break;
2702 case 8:
2703 /* Do we bind early? */
2704 if (memcmp (envline, "BIND_NOW", 8) == 0)
2706 GLRO(dl_lazy) = envline[9] == '\0';
2707 break;
2709 if (memcmp (envline, "BIND_NOT", 8) == 0)
2710 GLRO(dl_bind_not) = envline[9] != '\0';
2711 break;
2713 case 9:
2714 /* Test whether we want to see the content of the auxiliary
2715 array passed up from the kernel. */
2716 if (!__libc_enable_secure
2717 && memcmp (envline, "SHOW_AUXV", 9) == 0)
2718 _dl_show_auxv ();
2719 break;
2721 #if !HAVE_TUNABLES
2722 case 10:
2723 /* Mask for the important hardware capabilities. */
2724 if (!__libc_enable_secure
2725 && memcmp (envline, "HWCAP_MASK", 10) == 0)
2726 GLRO(dl_hwcap_mask) = _dl_strtoul (&envline[11], NULL);
2727 break;
2728 #endif
2730 case 11:
2731 /* Path where the binary is found. */
2732 if (!__libc_enable_secure
2733 && memcmp (envline, "ORIGIN_PATH", 11) == 0)
2734 GLRO(dl_origin_path) = &envline[12];
2735 break;
2737 case 12:
2738 /* The library search path. */
2739 if (!__libc_enable_secure
2740 && memcmp (envline, "LIBRARY_PATH", 12) == 0)
2742 state->library_path = &envline[13];
2743 state->library_path_source = "LD_LIBRARY_PATH";
2744 break;
2747 /* Where to place the profiling data file. */
2748 if (memcmp (envline, "DEBUG_OUTPUT", 12) == 0)
2750 debug_output = &envline[13];
2751 break;
2754 if (!__libc_enable_secure
2755 && memcmp (envline, "DYNAMIC_WEAK", 12) == 0)
2756 GLRO(dl_dynamic_weak) = 1;
2757 break;
2759 case 13:
2760 /* We might have some extra environment variable with length 13
2761 to handle. */
2762 #ifdef EXTRA_LD_ENVVARS_13
2763 EXTRA_LD_ENVVARS_13
2764 #endif
2765 if (!__libc_enable_secure
2766 && memcmp (envline, "USE_LOAD_BIAS", 13) == 0)
2768 GLRO(dl_use_load_bias) = envline[14] == '1' ? -1 : 0;
2769 break;
2771 break;
2773 case 14:
2774 /* Where to place the profiling data file. */
2775 if (!__libc_enable_secure
2776 && memcmp (envline, "PROFILE_OUTPUT", 14) == 0
2777 && envline[15] != '\0')
2778 GLRO(dl_profile_output) = &envline[15];
2779 break;
2781 case 16:
2782 /* The mode of the dynamic linker can be set. */
2783 if (memcmp (envline, "TRACE_PRELINKING", 16) == 0)
2785 state->mode = rtld_mode_trace;
2786 GLRO(dl_verbose) = 1;
2787 GLRO(dl_debug_mask) |= DL_DEBUG_PRELINK;
2788 GLRO(dl_trace_prelink) = &envline[17];
2790 break;
2792 case 20:
2793 /* The mode of the dynamic linker can be set. */
2794 if (memcmp (envline, "TRACE_LOADED_OBJECTS", 20) == 0)
2795 state->mode = rtld_mode_trace;
2796 break;
2798 /* We might have some extra environment variable to handle. This
2799 is tricky due to the pre-processing of the length of the name
2800 in the switch statement here. The code here assumes that added
2801 environment variables have a different length. */
2802 #ifdef EXTRA_LD_ENVVARS
2803 EXTRA_LD_ENVVARS
2804 #endif
2808 /* Extra security for SUID binaries. Remove all dangerous environment
2809 variables. */
2810 if (__builtin_expect (__libc_enable_secure, 0))
2812 static const char unsecure_envvars[] =
2813 #ifdef EXTRA_UNSECURE_ENVVARS
2814 EXTRA_UNSECURE_ENVVARS
2815 #endif
2816 UNSECURE_ENVVARS;
2817 const char *nextp;
2819 nextp = unsecure_envvars;
2822 unsetenv (nextp);
2823 /* We could use rawmemchr but this need not be fast. */
2824 nextp = (char *) (strchr) (nextp, '\0') + 1;
2826 while (*nextp != '\0');
2828 if (__access ("/etc/suid-debug", F_OK) != 0)
2830 #if !HAVE_TUNABLES
2831 unsetenv ("MALLOC_CHECK_");
2832 #endif
2833 GLRO(dl_debug_mask) = 0;
2836 if (state->mode != rtld_mode_normal)
2837 _exit (5);
2839 /* If we have to run the dynamic linker in debugging mode and the
2840 LD_DEBUG_OUTPUT environment variable is given, we write the debug
2841 messages to this file. */
2842 else if (state->any_debug && debug_output != NULL)
2844 const int flags = O_WRONLY | O_APPEND | O_CREAT | O_NOFOLLOW;
2845 size_t name_len = strlen (debug_output);
2846 char buf[name_len + 12];
2847 char *startp;
2849 buf[name_len + 11] = '\0';
2850 startp = _itoa (__getpid (), &buf[name_len + 11], 10, 0);
2851 *--startp = '.';
2852 startp = memcpy (startp - name_len, debug_output, name_len);
2854 GLRO(dl_debug_fd) = __open64_nocancel (startp, flags, DEFFILEMODE);
2855 if (GLRO(dl_debug_fd) == -1)
2856 /* We use standard output if opening the file failed. */
2857 GLRO(dl_debug_fd) = STDOUT_FILENO;
2861 #if HP_TIMING_INLINE
2862 static void
2863 print_statistics_item (const char *title, hp_timing_t time,
2864 hp_timing_t total)
2866 char cycles[HP_TIMING_PRINT_SIZE];
2867 HP_TIMING_PRINT (cycles, sizeof (cycles), time);
2869 char relative[3 * sizeof (hp_timing_t) + 2];
2870 char *cp = _itoa ((1000ULL * time) / total, relative + sizeof (relative),
2871 10, 0);
2872 /* Sets the decimal point. */
2873 char *wp = relative;
2874 switch (relative + sizeof (relative) - cp)
2876 case 3:
2877 *wp++ = *cp++;
2878 /* Fall through. */
2879 case 2:
2880 *wp++ = *cp++;
2881 /* Fall through. */
2882 case 1:
2883 *wp++ = '.';
2884 *wp++ = *cp++;
2886 *wp = '\0';
2887 _dl_debug_printf ("%s: %s cycles (%s%%)\n", title, cycles, relative);
2889 #endif
2891 /* Print the various times we collected. */
2892 static void
2893 __attribute ((noinline))
2894 print_statistics (const hp_timing_t *rtld_total_timep)
2896 #if HP_TIMING_INLINE
2898 char cycles[HP_TIMING_PRINT_SIZE];
2899 HP_TIMING_PRINT (cycles, sizeof (cycles), *rtld_total_timep);
2900 _dl_debug_printf ("\nruntime linker statistics:\n"
2901 " total startup time in dynamic loader: %s cycles\n",
2902 cycles);
2903 print_statistics_item (" time needed for relocation",
2904 relocate_time, *rtld_total_timep);
2906 #endif
2908 unsigned long int num_relative_relocations = 0;
2909 for (Lmid_t ns = 0; ns < GL(dl_nns); ++ns)
2911 if (GL(dl_ns)[ns]._ns_loaded == NULL)
2912 continue;
2914 struct r_scope_elem *scope = &GL(dl_ns)[ns]._ns_loaded->l_searchlist;
2916 for (unsigned int i = 0; i < scope->r_nlist; i++)
2918 struct link_map *l = scope->r_list [i];
2920 if (l->l_addr != 0 && l->l_info[VERSYMIDX (DT_RELCOUNT)])
2921 num_relative_relocations
2922 += l->l_info[VERSYMIDX (DT_RELCOUNT)]->d_un.d_val;
2923 #ifndef ELF_MACHINE_REL_RELATIVE
2924 /* Relative relocations are processed on these architectures if
2925 library is loaded to different address than p_vaddr or
2926 if not prelinked. */
2927 if ((l->l_addr != 0 || !l->l_info[VALIDX(DT_GNU_PRELINKED)])
2928 && l->l_info[VERSYMIDX (DT_RELACOUNT)])
2929 #else
2930 /* On e.g. IA-64 or Alpha, relative relocations are processed
2931 only if library is loaded to different address than p_vaddr. */
2932 if (l->l_addr != 0 && l->l_info[VERSYMIDX (DT_RELACOUNT)])
2933 #endif
2934 num_relative_relocations
2935 += l->l_info[VERSYMIDX (DT_RELACOUNT)]->d_un.d_val;
2939 _dl_debug_printf (" number of relocations: %lu\n"
2940 " number of relocations from cache: %lu\n"
2941 " number of relative relocations: %lu\n",
2942 GL(dl_num_relocations),
2943 GL(dl_num_cache_relocations),
2944 num_relative_relocations);
2946 #if HP_TIMING_INLINE
2947 print_statistics_item (" time needed to load objects",
2948 load_time, *rtld_total_timep);
2949 #endif