testrun.sh: Improve --help message
[glibc.git] / elf / rtld.c
blobfbbd60b446daa8f07f34bdf5755d38a6bbe4a2ee
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
167 attribute_relro attribute_hidden __attribute__ ((nocommon));
168 #ifndef THREAD_SET_POINTER_GUARD
169 strong_alias (__pointer_chk_guard_local, __pointer_chk_guard)
170 #endif
172 /* Check that AT_SECURE=0, or that the passed name does not contain
173 directories and is not overly long. Reject empty names
174 unconditionally. */
175 static bool
176 dso_name_valid_for_suid (const char *p)
178 if (__glibc_unlikely (__libc_enable_secure))
180 /* Ignore pathnames with directories for AT_SECURE=1
181 programs, and also skip overlong names. */
182 size_t len = strlen (p);
183 if (len >= SECURE_NAME_LIMIT || memchr (p, '/', len) != NULL)
184 return false;
186 return *p != '\0';
189 static void
190 audit_list_init (struct audit_list *list)
192 list->length = 0;
193 list->current_index = 0;
194 list->current_tail = NULL;
197 static void
198 audit_list_add_string (struct audit_list *list, const char *string)
200 /* Empty strings do not load anything. */
201 if (*string == '\0')
202 return;
204 if (list->length == array_length (list->audit_strings))
205 _dl_fatal_printf ("Fatal glibc error: Too many audit modules requested\n");
207 list->audit_strings[list->length++] = string;
209 /* Initialize processing of the first string for
210 audit_list_next. */
211 if (list->length == 1)
212 list->current_tail = string;
215 static void
216 audit_list_add_dynamic_tag (struct audit_list *list, struct link_map *main_map,
217 unsigned int tag)
219 ElfW(Dyn) *info = main_map->l_info[ADDRIDX (tag)];
220 const char *strtab = (const char *) D_PTR (main_map, l_info[DT_STRTAB]);
221 if (info != NULL)
222 audit_list_add_string (list, strtab + info->d_un.d_val);
225 static const char *
226 audit_list_next (struct audit_list *list)
228 if (list->current_tail == NULL)
229 return NULL;
231 while (true)
233 /* Advance to the next string in audit_strings if the current
234 string has been exhausted. */
235 while (*list->current_tail == '\0')
237 ++list->current_index;
238 if (list->current_index == list->length)
240 list->current_tail = NULL;
241 return NULL;
243 list->current_tail = list->audit_strings[list->current_index];
246 /* Split the in-string audit list at the next colon colon. */
247 size_t len = strcspn (list->current_tail, ":");
248 if (len > 0 && len < sizeof (list->fname))
250 memcpy (list->fname, list->current_tail, len);
251 list->fname[len] = '\0';
253 else
254 /* Mark the name as unusable for dso_name_valid_for_suid. */
255 list->fname[0] = '\0';
257 /* Skip over the substring and the following delimiter. */
258 list->current_tail += len;
259 if (*list->current_tail == ':')
260 ++list->current_tail;
262 /* If the name is valid, return it. */
263 if (dso_name_valid_for_suid (list->fname))
264 return list->fname;
266 /* Otherwise wrap around to find the next list element. . */
270 /* Count audit modules before they are loaded so GLRO(dl_naudit)
271 is not yet usable. */
272 static size_t
273 audit_list_count (struct audit_list *list)
275 /* Restore the audit_list iterator state at the end. */
276 const char *saved_tail = list->current_tail;
277 size_t naudit = 0;
279 assert (list->current_index == 0);
280 while (audit_list_next (list) != NULL)
281 naudit++;
282 list->current_tail = saved_tail;
283 list->current_index = 0;
284 return naudit;
287 static void
288 dl_main_state_init (struct dl_main_state *state)
290 audit_list_init (&state->audit_list);
291 state->library_path = NULL;
292 state->library_path_source = NULL;
293 state->preloadlist = NULL;
294 state->preloadarg = NULL;
295 state->glibc_hwcaps_prepend = NULL;
296 state->glibc_hwcaps_mask = NULL;
297 state->mode = rtld_mode_normal;
298 state->any_debug = false;
299 state->version_info = false;
302 #ifndef HAVE_INLINED_SYSCALLS
303 /* Set nonzero during loading and initialization of executable and
304 libraries, cleared before the executable's entry point runs. This
305 must not be initialized to nonzero, because the unused dynamic
306 linker loaded in for libc.so's "ld.so.1" dep will provide the
307 definition seen by libc.so's initializer; that value must be zero,
308 and will be since that dynamic linker's _dl_start and dl_main will
309 never be called. */
310 int _dl_starting_up = 0;
311 rtld_hidden_def (_dl_starting_up)
312 #endif
314 /* This is the structure which defines all variables global to ld.so
315 (except those which cannot be added for some reason). */
316 struct rtld_global _rtld_global =
318 /* Get architecture specific initializer. */
319 #include <dl-procruntime.c>
320 /* Generally the default presumption without further information is an
321 * executable stack but this is not true for all platforms. */
322 ._dl_stack_flags = DEFAULT_STACK_PERMS,
323 #ifdef _LIBC_REENTRANT
324 ._dl_load_lock = _RTLD_LOCK_RECURSIVE_INITIALIZER,
325 ._dl_load_write_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 memcpy (GL(dl_rtld_map).l_info, info->l.l_info,
468 sizeof GL(dl_rtld_map).l_info);
469 GL(dl_rtld_map).l_mach = info->l.l_mach;
470 GL(dl_rtld_map).l_relocated = 1;
471 #endif
472 _dl_setup_hash (&GL(dl_rtld_map));
473 GL(dl_rtld_map).l_real = &GL(dl_rtld_map);
474 GL(dl_rtld_map).l_map_start = (ElfW(Addr)) _begin;
475 GL(dl_rtld_map).l_map_end = (ElfW(Addr)) _end;
476 GL(dl_rtld_map).l_text_end = (ElfW(Addr)) _etext;
477 /* Copy the TLS related data if necessary. */
478 #ifndef DONT_USE_BOOTSTRAP_MAP
479 # if NO_TLS_OFFSET != 0
480 GL(dl_rtld_map).l_tls_offset = NO_TLS_OFFSET;
481 # endif
482 #endif
484 /* Initialize the stack end variable. */
485 __libc_stack_end = __builtin_frame_address (0);
487 /* Call the OS-dependent function to set up life so we can do things like
488 file access. It will call `dl_main' (below) to do all the real work
489 of the dynamic linker, and then unwind our frame and run the user
490 entry point on the same stack we entered on. */
491 start_addr = _dl_sysdep_start (arg, &dl_main);
493 if (__glibc_unlikely (GLRO(dl_debug_mask) & DL_DEBUG_STATISTICS))
495 RTLD_TIMING_VAR (rtld_total_time);
496 rtld_timer_stop (&rtld_total_time, start_time);
497 print_statistics (RTLD_TIMING_REF(rtld_total_time));
500 return start_addr;
503 static ElfW(Addr) __attribute_used__
504 _dl_start (void *arg)
506 #ifdef DONT_USE_BOOTSTRAP_MAP
507 # define bootstrap_map GL(dl_rtld_map)
508 #else
509 struct dl_start_final_info info;
510 # define bootstrap_map info.l
511 #endif
513 /* This #define produces dynamic linking inline functions for
514 bootstrap relocation instead of general-purpose relocation.
515 Since ld.so must not have any undefined symbols the result
516 is trivial: always the map of ld.so itself. */
517 #define RTLD_BOOTSTRAP
518 #define BOOTSTRAP_MAP (&bootstrap_map)
519 #define RESOLVE_MAP(sym, version, flags) BOOTSTRAP_MAP
520 #include "dynamic-link.h"
522 #ifdef DONT_USE_BOOTSTRAP_MAP
523 rtld_timer_start (&start_time);
524 #else
525 rtld_timer_start (&info.start_time);
526 #endif
528 /* Partly clean the `bootstrap_map' structure up. Don't use
529 `memset' since it might not be built in or inlined and we cannot
530 make function calls at this point. Use '__builtin_memset' if we
531 know it is available. We do not have to clear the memory if we
532 do not have to use the temporary bootstrap_map. Global variables
533 are initialized to zero by default. */
534 #ifndef DONT_USE_BOOTSTRAP_MAP
535 # ifdef HAVE_BUILTIN_MEMSET
536 __builtin_memset (bootstrap_map.l_info, '\0', sizeof (bootstrap_map.l_info));
537 # else
538 for (size_t cnt = 0;
539 cnt < sizeof (bootstrap_map.l_info) / sizeof (bootstrap_map.l_info[0]);
540 ++cnt)
541 bootstrap_map.l_info[cnt] = 0;
542 # endif
543 #endif
545 /* Figure out the run-time load address of the dynamic linker itself. */
546 bootstrap_map.l_addr = elf_machine_load_address ();
548 /* Read our own dynamic section and fill in the info array. */
549 bootstrap_map.l_ld = (void *) bootstrap_map.l_addr + elf_machine_dynamic ();
550 elf_get_dynamic_info (&bootstrap_map, NULL);
552 #if NO_TLS_OFFSET != 0
553 bootstrap_map.l_tls_offset = NO_TLS_OFFSET;
554 #endif
556 #ifdef ELF_MACHINE_BEFORE_RTLD_RELOC
557 ELF_MACHINE_BEFORE_RTLD_RELOC (bootstrap_map.l_info);
558 #endif
560 if (bootstrap_map.l_addr || ! bootstrap_map.l_info[VALIDX(DT_GNU_PRELINKED)])
562 /* Relocate ourselves so we can do normal function calls and
563 data access using the global offset table. */
565 ELF_DYNAMIC_RELOCATE (&bootstrap_map, 0, 0, 0);
567 bootstrap_map.l_relocated = 1;
569 /* Please note that we don't allow profiling of this object and
570 therefore need not test whether we have to allocate the array
571 for the relocation results (as done in dl-reloc.c). */
573 /* Now life is sane; we can call functions and access global data.
574 Set up to use the operating system facilities, and find out from
575 the operating system's program loader where to find the program
576 header table in core. Put the rest of _dl_start into a separate
577 function, that way the compiler cannot put accesses to the GOT
578 before ELF_DYNAMIC_RELOCATE. */
580 __rtld_malloc_init_stubs ();
583 #ifdef DONT_USE_BOOTSTRAP_MAP
584 ElfW(Addr) entry = _dl_start_final (arg);
585 #else
586 ElfW(Addr) entry = _dl_start_final (arg, &info);
587 #endif
589 #ifndef ELF_MACHINE_START_ADDRESS
590 # define ELF_MACHINE_START_ADDRESS(map, start) (start)
591 #endif
593 return ELF_MACHINE_START_ADDRESS (GL(dl_ns)[LM_ID_BASE]._ns_loaded, entry);
599 /* Now life is peachy; we can do all normal operations.
600 On to the real work. */
602 /* Some helper functions. */
604 /* Arguments to relocate_doit. */
605 struct relocate_args
607 struct link_map *l;
608 int reloc_mode;
611 struct map_args
613 /* Argument to map_doit. */
614 const char *str;
615 struct link_map *loader;
616 int mode;
617 /* Return value of map_doit. */
618 struct link_map *map;
621 struct dlmopen_args
623 const char *fname;
624 struct link_map *map;
627 struct lookup_args
629 const char *name;
630 struct link_map *map;
631 void *result;
634 /* Arguments to version_check_doit. */
635 struct version_check_args
637 int doexit;
638 int dotrace;
641 static void
642 relocate_doit (void *a)
644 struct relocate_args *args = (struct relocate_args *) a;
646 _dl_relocate_object (args->l, args->l->l_scope, args->reloc_mode, 0);
649 static void
650 map_doit (void *a)
652 struct map_args *args = (struct map_args *) a;
653 int type = (args->mode == __RTLD_OPENEXEC) ? lt_executable : lt_library;
654 args->map = _dl_map_object (args->loader, args->str, type, 0,
655 args->mode, LM_ID_BASE);
658 static void
659 dlmopen_doit (void *a)
661 struct dlmopen_args *args = (struct dlmopen_args *) a;
662 args->map = _dl_open (args->fname,
663 (RTLD_LAZY | __RTLD_DLOPEN | __RTLD_AUDIT
664 | __RTLD_SECURE),
665 dl_main, LM_ID_NEWLM, _dl_argc, _dl_argv,
666 __environ);
669 static void
670 lookup_doit (void *a)
672 struct lookup_args *args = (struct lookup_args *) a;
673 const ElfW(Sym) *ref = NULL;
674 args->result = NULL;
675 lookup_t l = _dl_lookup_symbol_x (args->name, args->map, &ref,
676 args->map->l_local_scope, NULL, 0,
677 DL_LOOKUP_RETURN_NEWEST, NULL);
678 if (ref != NULL)
679 args->result = DL_SYMBOL_ADDRESS (l, ref);
682 static void
683 version_check_doit (void *a)
685 struct version_check_args *args = (struct version_check_args *) a;
686 if (_dl_check_all_versions (GL(dl_ns)[LM_ID_BASE]._ns_loaded, 1,
687 args->dotrace) && args->doexit)
688 /* We cannot start the application. Abort now. */
689 _exit (1);
693 static inline struct link_map *
694 find_needed (const char *name)
696 struct r_scope_elem *scope = &GL(dl_ns)[LM_ID_BASE]._ns_loaded->l_searchlist;
697 unsigned int n = scope->r_nlist;
699 while (n-- > 0)
700 if (_dl_name_match_p (name, scope->r_list[n]))
701 return scope->r_list[n];
703 /* Should never happen. */
704 return NULL;
707 static int
708 match_version (const char *string, struct link_map *map)
710 const char *strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]);
711 ElfW(Verdef) *def;
713 #define VERDEFTAG (DT_NUM + DT_THISPROCNUM + DT_VERSIONTAGIDX (DT_VERDEF))
714 if (map->l_info[VERDEFTAG] == NULL)
715 /* The file has no symbol versioning. */
716 return 0;
718 def = (ElfW(Verdef) *) ((char *) map->l_addr
719 + map->l_info[VERDEFTAG]->d_un.d_ptr);
720 while (1)
722 ElfW(Verdaux) *aux = (ElfW(Verdaux) *) ((char *) def + def->vd_aux);
724 /* Compare the version strings. */
725 if (strcmp (string, strtab + aux->vda_name) == 0)
726 /* Bingo! */
727 return 1;
729 /* If no more definitions we failed to find what we want. */
730 if (def->vd_next == 0)
731 break;
733 /* Next definition. */
734 def = (ElfW(Verdef) *) ((char *) def + def->vd_next);
737 return 0;
740 static bool tls_init_tp_called;
742 static void *
743 init_tls (size_t naudit)
745 /* Number of elements in the static TLS block. */
746 GL(dl_tls_static_nelem) = GL(dl_tls_max_dtv_idx);
748 /* Do not do this twice. The audit interface might have required
749 the DTV interfaces to be set up early. */
750 if (GL(dl_initial_dtv) != NULL)
751 return NULL;
753 /* Allocate the array which contains the information about the
754 dtv slots. We allocate a few entries more than needed to
755 avoid the need for reallocation. */
756 size_t nelem = GL(dl_tls_max_dtv_idx) + 1 + TLS_SLOTINFO_SURPLUS;
758 /* Allocate. */
759 GL(dl_tls_dtv_slotinfo_list) = (struct dtv_slotinfo_list *)
760 calloc (sizeof (struct dtv_slotinfo_list)
761 + nelem * sizeof (struct dtv_slotinfo), 1);
762 /* No need to check the return value. If memory allocation failed
763 the program would have been terminated. */
765 struct dtv_slotinfo *slotinfo = GL(dl_tls_dtv_slotinfo_list)->slotinfo;
766 GL(dl_tls_dtv_slotinfo_list)->len = nelem;
767 GL(dl_tls_dtv_slotinfo_list)->next = NULL;
769 /* Fill in the information from the loaded modules. No namespace
770 but the base one can be filled at this time. */
771 assert (GL(dl_ns)[LM_ID_BASE + 1]._ns_loaded == NULL);
772 int i = 0;
773 for (struct link_map *l = GL(dl_ns)[LM_ID_BASE]._ns_loaded; l != NULL;
774 l = l->l_next)
775 if (l->l_tls_blocksize != 0)
777 /* This is a module with TLS data. Store the map reference.
778 The generation counter is zero. */
779 slotinfo[i].map = l;
780 /* slotinfo[i].gen = 0; */
781 ++i;
783 assert (i == GL(dl_tls_max_dtv_idx));
785 /* Calculate the size of the static TLS surplus. */
786 _dl_tls_static_surplus_init (naudit);
788 /* Compute the TLS offsets for the various blocks. */
789 _dl_determine_tlsoffset ();
791 /* Construct the static TLS block and the dtv for the initial
792 thread. For some platforms this will include allocating memory
793 for the thread descriptor. The memory for the TLS block will
794 never be freed. It should be allocated accordingly. The dtv
795 array can be changed if dynamic loading requires it. */
796 void *tcbp = _dl_allocate_tls_storage ();
797 if (tcbp == NULL)
798 _dl_fatal_printf ("\
799 cannot allocate TLS data structures for initial thread\n");
801 /* Store for detection of the special case by __tls_get_addr
802 so it knows not to pass this dtv to the normal realloc. */
803 GL(dl_initial_dtv) = GET_DTV (tcbp);
805 /* And finally install it for the main thread. */
806 const char *lossage = TLS_INIT_TP (tcbp);
807 if (__glibc_unlikely (lossage != NULL))
808 _dl_fatal_printf ("cannot set up thread-local storage: %s\n", lossage);
809 __tls_init_tp ();
810 tls_init_tp_called = true;
812 return tcbp;
815 static unsigned int
816 do_preload (const char *fname, struct link_map *main_map, const char *where)
818 const char *objname;
819 const char *err_str = NULL;
820 struct map_args args;
821 bool malloced;
823 args.str = fname;
824 args.loader = main_map;
825 args.mode = __RTLD_SECURE;
827 unsigned int old_nloaded = GL(dl_ns)[LM_ID_BASE]._ns_nloaded;
829 (void) _dl_catch_error (&objname, &err_str, &malloced, map_doit, &args);
830 if (__glibc_unlikely (err_str != NULL))
832 _dl_error_printf ("\
833 ERROR: ld.so: object '%s' from %s cannot be preloaded (%s): ignored.\n",
834 fname, where, err_str);
835 /* No need to call free, this is still before
836 the libc's malloc is used. */
838 else if (GL(dl_ns)[LM_ID_BASE]._ns_nloaded != old_nloaded)
839 /* It is no duplicate. */
840 return 1;
842 /* Nothing loaded. */
843 return 0;
846 static void
847 security_init (void)
849 /* Set up the stack checker's canary. */
850 uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard (_dl_random);
851 #ifdef THREAD_SET_STACK_GUARD
852 THREAD_SET_STACK_GUARD (stack_chk_guard);
853 #else
854 __stack_chk_guard = stack_chk_guard;
855 #endif
857 /* Set up the pointer guard as well, if necessary. */
858 uintptr_t pointer_chk_guard
859 = _dl_setup_pointer_guard (_dl_random, stack_chk_guard);
860 #ifdef THREAD_SET_POINTER_GUARD
861 THREAD_SET_POINTER_GUARD (pointer_chk_guard);
862 #endif
863 __pointer_chk_guard_local = pointer_chk_guard;
865 /* We do not need the _dl_random value anymore. The less
866 information we leave behind, the better, so clear the
867 variable. */
868 _dl_random = NULL;
871 #include <setup-vdso.h>
873 /* The LD_PRELOAD environment variable gives list of libraries
874 separated by white space or colons that are loaded before the
875 executable's dependencies and prepended to the global scope list.
876 (If the binary is running setuid all elements containing a '/' are
877 ignored since it is insecure.) Return the number of preloads
878 performed. Ditto for --preload command argument. */
879 unsigned int
880 handle_preload_list (const char *preloadlist, struct link_map *main_map,
881 const char *where)
883 unsigned int npreloads = 0;
884 const char *p = preloadlist;
885 char fname[SECURE_PATH_LIMIT];
887 while (*p != '\0')
889 /* Split preload list at space/colon. */
890 size_t len = strcspn (p, " :");
891 if (len > 0 && len < sizeof (fname))
893 memcpy (fname, p, len);
894 fname[len] = '\0';
896 else
897 fname[0] = '\0';
899 /* Skip over the substring and the following delimiter. */
900 p += len;
901 if (*p != '\0')
902 ++p;
904 if (dso_name_valid_for_suid (fname))
905 npreloads += do_preload (fname, main_map, where);
907 return npreloads;
910 /* Called if the audit DSO cannot be used: if it does not have the
911 appropriate interfaces, or it expects a more recent version library
912 version than what the dynamic linker provides. */
913 static void
914 unload_audit_module (struct link_map *map, int original_tls_idx)
916 #ifndef NDEBUG
917 Lmid_t ns = map->l_ns;
918 #endif
919 _dl_close (map);
921 /* Make sure the namespace has been cleared entirely. */
922 assert (GL(dl_ns)[ns]._ns_loaded == NULL);
923 assert (GL(dl_ns)[ns]._ns_nloaded == 0);
925 GL(dl_tls_max_dtv_idx) = original_tls_idx;
928 /* Called to print an error message if loading of an audit module
929 failed. */
930 static void
931 report_audit_module_load_error (const char *name, const char *err_str,
932 bool malloced)
934 _dl_error_printf ("\
935 ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
936 name, err_str);
937 if (malloced)
938 free ((char *) err_str);
941 /* Load one audit module. */
942 static void
943 load_audit_module (const char *name, struct audit_ifaces **last_audit)
945 int original_tls_idx = GL(dl_tls_max_dtv_idx);
947 struct dlmopen_args dlmargs;
948 dlmargs.fname = name;
949 dlmargs.map = NULL;
951 const char *objname;
952 const char *err_str = NULL;
953 bool malloced;
954 _dl_catch_error (&objname, &err_str, &malloced, dlmopen_doit, &dlmargs);
955 if (__glibc_unlikely (err_str != NULL))
957 report_audit_module_load_error (name, err_str, malloced);
958 return;
961 struct lookup_args largs;
962 largs.name = "la_version";
963 largs.map = dlmargs.map;
964 _dl_catch_error (&objname, &err_str, &malloced, lookup_doit, &largs);
965 if (__glibc_likely (err_str != NULL))
967 unload_audit_module (dlmargs.map, original_tls_idx);
968 report_audit_module_load_error (name, err_str, malloced);
969 return;
972 unsigned int (*laversion) (unsigned int) = largs.result;
974 /* A null symbol indicates that something is very wrong with the
975 loaded object because defined symbols are supposed to have a
976 valid, non-null address. */
977 assert (laversion != NULL);
979 unsigned int lav = laversion (LAV_CURRENT);
980 if (lav == 0)
982 /* Only print an error message if debugging because this can
983 happen deliberately. */
984 if (GLRO(dl_debug_mask) & DL_DEBUG_FILES)
985 _dl_debug_printf ("\
986 file=%s [%lu]; audit interface function la_version returned zero; ignored.\n",
987 dlmargs.map->l_name, dlmargs.map->l_ns);
988 unload_audit_module (dlmargs.map, original_tls_idx);
989 return;
992 if (lav > LAV_CURRENT)
994 _dl_debug_printf ("\
995 ERROR: audit interface '%s' requires version %d (maximum supported version %d); ignored.\n",
996 name, lav, LAV_CURRENT);
997 unload_audit_module (dlmargs.map, original_tls_idx);
998 return;
1001 enum { naudit_ifaces = 8 };
1002 union
1004 struct audit_ifaces ifaces;
1005 void (*fptr[naudit_ifaces]) (void);
1006 } *newp = malloc (sizeof (*newp));
1007 if (newp == NULL)
1008 _dl_fatal_printf ("Out of memory while loading audit modules\n");
1010 /* Names of the auditing interfaces. All in one
1011 long string. */
1012 static const char audit_iface_names[] =
1013 "la_activity\0"
1014 "la_objsearch\0"
1015 "la_objopen\0"
1016 "la_preinit\0"
1017 #if __ELF_NATIVE_CLASS == 32
1018 "la_symbind32\0"
1019 #elif __ELF_NATIVE_CLASS == 64
1020 "la_symbind64\0"
1021 #else
1022 # error "__ELF_NATIVE_CLASS must be defined"
1023 #endif
1024 #define STRING(s) __STRING (s)
1025 "la_" STRING (ARCH_LA_PLTENTER) "\0"
1026 "la_" STRING (ARCH_LA_PLTEXIT) "\0"
1027 "la_objclose\0";
1028 unsigned int cnt = 0;
1029 const char *cp = audit_iface_names;
1032 largs.name = cp;
1033 _dl_catch_error (&objname, &err_str, &malloced, lookup_doit, &largs);
1035 /* Store the pointer. */
1036 if (err_str == NULL && largs.result != NULL)
1037 newp->fptr[cnt] = largs.result;
1038 else
1039 newp->fptr[cnt] = NULL;
1040 ++cnt;
1042 cp = rawmemchr (cp, '\0') + 1;
1044 while (*cp != '\0');
1045 assert (cnt == naudit_ifaces);
1047 /* Now append the new auditing interface to the list. */
1048 newp->ifaces.next = NULL;
1049 if (*last_audit == NULL)
1050 *last_audit = GLRO(dl_audit) = &newp->ifaces;
1051 else
1052 *last_audit = (*last_audit)->next = &newp->ifaces;
1054 /* The dynamic linker link map is statically allocated, so the
1055 cookie in _dl_new_object has not happened. */
1056 link_map_audit_state (&GL (dl_rtld_map), GLRO (dl_naudit))->cookie
1057 = (intptr_t) &GL (dl_rtld_map);
1059 ++GLRO(dl_naudit);
1061 /* Mark the DSO as being used for auditing. */
1062 dlmargs.map->l_auditing = 1;
1065 /* Notify the the audit modules that the object MAP has already been
1066 loaded. */
1067 static void
1068 notify_audit_modules_of_loaded_object (struct link_map *map)
1070 struct audit_ifaces *afct = GLRO(dl_audit);
1071 for (unsigned int cnt = 0; cnt < GLRO(dl_naudit); ++cnt)
1073 if (afct->objopen != NULL)
1075 struct auditstate *state = link_map_audit_state (map, cnt);
1076 state->bindflags = afct->objopen (map, LM_ID_BASE, &state->cookie);
1077 map->l_audit_any_plt |= state->bindflags != 0;
1080 afct = afct->next;
1084 /* Load all audit modules. */
1085 static void
1086 load_audit_modules (struct link_map *main_map, struct audit_list *audit_list)
1088 struct audit_ifaces *last_audit = NULL;
1090 while (true)
1092 const char *name = audit_list_next (audit_list);
1093 if (name == NULL)
1094 break;
1095 load_audit_module (name, &last_audit);
1098 /* Notify audit modules of the initially loaded modules (the main
1099 program and the dynamic linker itself). */
1100 if (GLRO(dl_naudit) > 0)
1102 notify_audit_modules_of_loaded_object (main_map);
1103 notify_audit_modules_of_loaded_object (&GL(dl_rtld_map));
1107 static void
1108 dl_main (const ElfW(Phdr) *phdr,
1109 ElfW(Word) phnum,
1110 ElfW(Addr) *user_entry,
1111 ElfW(auxv_t) *auxv)
1113 const ElfW(Phdr) *ph;
1114 struct link_map *main_map;
1115 size_t file_size;
1116 char *file;
1117 bool has_interp = false;
1118 unsigned int i;
1119 bool prelinked = false;
1120 bool rtld_is_main = false;
1121 void *tcbp = NULL;
1123 struct dl_main_state state;
1124 dl_main_state_init (&state);
1126 __tls_pre_init_tp ();
1128 #if !PTHREAD_IN_LIBC
1129 /* The explicit initialization here is cheaper than processing the reloc
1130 in the _rtld_local definition's initializer. */
1131 GL(dl_make_stack_executable_hook) = &_dl_make_stack_executable;
1132 #endif
1134 /* Process the environment variable which control the behaviour. */
1135 process_envvars (&state);
1137 #ifndef HAVE_INLINED_SYSCALLS
1138 /* Set up a flag which tells we are just starting. */
1139 _dl_starting_up = 1;
1140 #endif
1142 const char *ld_so_name = _dl_argv[0];
1143 if (*user_entry == (ElfW(Addr)) ENTRY_POINT)
1145 /* Ho ho. We are not the program interpreter! We are the program
1146 itself! This means someone ran ld.so as a command. Well, that
1147 might be convenient to do sometimes. We support it by
1148 interpreting the args like this:
1150 ld.so PROGRAM ARGS...
1152 The first argument is the name of a file containing an ELF
1153 executable we will load and run with the following arguments.
1154 To simplify life here, PROGRAM is searched for using the
1155 normal rules for shared objects, rather than $PATH or anything
1156 like that. We just load it and use its entry point; we don't
1157 pay attention to its PT_INTERP command (we are the interpreter
1158 ourselves). This is an easy way to test a new ld.so before
1159 installing it. */
1160 rtld_is_main = true;
1162 char *argv0 = NULL;
1164 /* Note the place where the dynamic linker actually came from. */
1165 GL(dl_rtld_map).l_name = rtld_progname;
1167 while (_dl_argc > 1)
1168 if (! strcmp (_dl_argv[1], "--list"))
1170 if (state.mode != rtld_mode_help)
1172 state.mode = rtld_mode_list;
1173 /* This means do no dependency analysis. */
1174 GLRO(dl_lazy) = -1;
1177 ++_dl_skip_args;
1178 --_dl_argc;
1179 ++_dl_argv;
1181 else if (! strcmp (_dl_argv[1], "--verify"))
1183 if (state.mode != rtld_mode_help)
1184 state.mode = rtld_mode_verify;
1186 ++_dl_skip_args;
1187 --_dl_argc;
1188 ++_dl_argv;
1190 else if (! strcmp (_dl_argv[1], "--inhibit-cache"))
1192 GLRO(dl_inhibit_cache) = 1;
1193 ++_dl_skip_args;
1194 --_dl_argc;
1195 ++_dl_argv;
1197 else if (! strcmp (_dl_argv[1], "--library-path")
1198 && _dl_argc > 2)
1200 state.library_path = _dl_argv[2];
1201 state.library_path_source = "--library-path";
1203 _dl_skip_args += 2;
1204 _dl_argc -= 2;
1205 _dl_argv += 2;
1207 else if (! strcmp (_dl_argv[1], "--inhibit-rpath")
1208 && _dl_argc > 2)
1210 GLRO(dl_inhibit_rpath) = _dl_argv[2];
1212 _dl_skip_args += 2;
1213 _dl_argc -= 2;
1214 _dl_argv += 2;
1216 else if (! strcmp (_dl_argv[1], "--audit") && _dl_argc > 2)
1218 audit_list_add_string (&state.audit_list, _dl_argv[2]);
1220 _dl_skip_args += 2;
1221 _dl_argc -= 2;
1222 _dl_argv += 2;
1224 else if (! strcmp (_dl_argv[1], "--preload") && _dl_argc > 2)
1226 state.preloadarg = _dl_argv[2];
1227 _dl_skip_args += 2;
1228 _dl_argc -= 2;
1229 _dl_argv += 2;
1231 else if (! strcmp (_dl_argv[1], "--argv0") && _dl_argc > 2)
1233 argv0 = _dl_argv[2];
1235 _dl_skip_args += 2;
1236 _dl_argc -= 2;
1237 _dl_argv += 2;
1239 else if (strcmp (_dl_argv[1], "--glibc-hwcaps-prepend") == 0
1240 && _dl_argc > 2)
1242 state.glibc_hwcaps_prepend = _dl_argv[2];
1243 _dl_skip_args += 2;
1244 _dl_argc -= 2;
1245 _dl_argv += 2;
1247 else if (strcmp (_dl_argv[1], "--glibc-hwcaps-mask") == 0
1248 && _dl_argc > 2)
1250 state.glibc_hwcaps_mask = _dl_argv[2];
1251 _dl_skip_args += 2;
1252 _dl_argc -= 2;
1253 _dl_argv += 2;
1255 #if HAVE_TUNABLES
1256 else if (! strcmp (_dl_argv[1], "--list-tunables"))
1258 state.mode = rtld_mode_list_tunables;
1260 ++_dl_skip_args;
1261 --_dl_argc;
1262 ++_dl_argv;
1264 #endif
1265 else if (! strcmp (_dl_argv[1], "--list-diagnostics"))
1267 state.mode = rtld_mode_list_diagnostics;
1269 ++_dl_skip_args;
1270 --_dl_argc;
1271 ++_dl_argv;
1273 else if (strcmp (_dl_argv[1], "--help") == 0)
1275 state.mode = rtld_mode_help;
1276 --_dl_argc;
1277 ++_dl_argv;
1279 else if (strcmp (_dl_argv[1], "--version") == 0)
1280 _dl_version ();
1281 else if (_dl_argv[1][0] == '-' && _dl_argv[1][1] == '-')
1283 if (_dl_argv[1][1] == '\0')
1284 /* End of option list. */
1285 break;
1286 else
1287 /* Unrecognized option. */
1288 _dl_usage (ld_so_name, _dl_argv[1]);
1290 else
1291 break;
1293 #if HAVE_TUNABLES
1294 if (__glibc_unlikely (state.mode == rtld_mode_list_tunables))
1296 __tunables_print ();
1297 _exit (0);
1299 #endif
1301 if (state.mode == rtld_mode_list_diagnostics)
1302 _dl_print_diagnostics (_environ);
1304 /* If we have no further argument the program was called incorrectly.
1305 Grant the user some education. */
1306 if (_dl_argc < 2)
1308 if (state.mode == rtld_mode_help)
1309 /* --help without an executable is not an error. */
1310 _dl_help (ld_so_name, &state);
1311 else
1312 _dl_usage (ld_so_name, NULL);
1315 ++_dl_skip_args;
1316 --_dl_argc;
1317 ++_dl_argv;
1319 /* The initialization of _dl_stack_flags done below assumes the
1320 executable's PT_GNU_STACK may have been honored by the kernel, and
1321 so a PT_GNU_STACK with PF_X set means the stack started out with
1322 execute permission. However, this is not really true if the
1323 dynamic linker is the executable the kernel loaded. For this
1324 case, we must reinitialize _dl_stack_flags to match the dynamic
1325 linker itself. If the dynamic linker was built with a
1326 PT_GNU_STACK, then the kernel may have loaded us with a
1327 nonexecutable stack that we will have to make executable when we
1328 load the program below unless it has a PT_GNU_STACK indicating
1329 nonexecutable stack is ok. */
1331 for (ph = phdr; ph < &phdr[phnum]; ++ph)
1332 if (ph->p_type == PT_GNU_STACK)
1334 GL(dl_stack_flags) = ph->p_flags;
1335 break;
1338 if (__glibc_unlikely (state.mode == rtld_mode_verify
1339 || state.mode == rtld_mode_help))
1341 const char *objname;
1342 const char *err_str = NULL;
1343 struct map_args args;
1344 bool malloced;
1346 args.str = rtld_progname;
1347 args.loader = NULL;
1348 args.mode = __RTLD_OPENEXEC;
1349 (void) _dl_catch_error (&objname, &err_str, &malloced, map_doit,
1350 &args);
1351 if (__glibc_unlikely (err_str != NULL))
1353 /* We don't free the returned string, the programs stops
1354 anyway. */
1355 if (state.mode == rtld_mode_help)
1356 /* Mask the failure to load the main object. The help
1357 message contains less information in this case. */
1358 _dl_help (ld_so_name, &state);
1359 else
1360 _exit (EXIT_FAILURE);
1363 else
1365 RTLD_TIMING_VAR (start);
1366 rtld_timer_start (&start);
1367 _dl_map_object (NULL, rtld_progname, lt_executable, 0,
1368 __RTLD_OPENEXEC, LM_ID_BASE);
1369 rtld_timer_stop (&load_time, start);
1372 /* Now the map for the main executable is available. */
1373 main_map = GL(dl_ns)[LM_ID_BASE]._ns_loaded;
1375 if (__glibc_likely (state.mode == rtld_mode_normal)
1376 && GL(dl_rtld_map).l_info[DT_SONAME] != NULL
1377 && main_map->l_info[DT_SONAME] != NULL
1378 && strcmp ((const char *) D_PTR (&GL(dl_rtld_map), l_info[DT_STRTAB])
1379 + GL(dl_rtld_map).l_info[DT_SONAME]->d_un.d_val,
1380 (const char *) D_PTR (main_map, l_info[DT_STRTAB])
1381 + main_map->l_info[DT_SONAME]->d_un.d_val) == 0)
1382 _dl_fatal_printf ("loader cannot load itself\n");
1384 phdr = main_map->l_phdr;
1385 phnum = main_map->l_phnum;
1386 /* We overwrite here a pointer to a malloc()ed string. But since
1387 the malloc() implementation used at this point is the dummy
1388 implementations which has no real free() function it does not
1389 makes sense to free the old string first. */
1390 main_map->l_name = (char *) "";
1391 *user_entry = main_map->l_entry;
1393 #ifdef HAVE_AUX_VECTOR
1394 /* Adjust the on-stack auxiliary vector so that it looks like the
1395 binary was executed directly. */
1396 for (ElfW(auxv_t) *av = auxv; av->a_type != AT_NULL; av++)
1397 switch (av->a_type)
1399 case AT_PHDR:
1400 av->a_un.a_val = (uintptr_t) phdr;
1401 break;
1402 case AT_PHNUM:
1403 av->a_un.a_val = phnum;
1404 break;
1405 case AT_ENTRY:
1406 av->a_un.a_val = *user_entry;
1407 break;
1408 case AT_EXECFN:
1409 av->a_un.a_val = (uintptr_t) _dl_argv[0];
1410 break;
1412 #endif
1414 /* Set the argv[0] string now that we've processed the executable. */
1415 if (argv0 != NULL)
1416 _dl_argv[0] = argv0;
1418 else
1420 /* Create a link_map for the executable itself.
1421 This will be what dlopen on "" returns. */
1422 main_map = _dl_new_object ((char *) "", "", lt_executable, NULL,
1423 __RTLD_OPENEXEC, LM_ID_BASE);
1424 assert (main_map != NULL);
1425 main_map->l_phdr = phdr;
1426 main_map->l_phnum = phnum;
1427 main_map->l_entry = *user_entry;
1429 /* Even though the link map is not yet fully initialized we can add
1430 it to the map list since there are no possible users running yet. */
1431 _dl_add_to_namespace_list (main_map, LM_ID_BASE);
1432 assert (main_map == GL(dl_ns)[LM_ID_BASE]._ns_loaded);
1434 /* At this point we are in a bit of trouble. We would have to
1435 fill in the values for l_dev and l_ino. But in general we
1436 do not know where the file is. We also do not handle AT_EXECFD
1437 even if it would be passed up.
1439 We leave the values here defined to 0. This is normally no
1440 problem as the program code itself is normally no shared
1441 object and therefore cannot be loaded dynamically. Nothing
1442 prevent the use of dynamic binaries and in these situations
1443 we might get problems. We might not be able to find out
1444 whether the object is already loaded. But since there is no
1445 easy way out and because the dynamic binary must also not
1446 have an SONAME we ignore this program for now. If it becomes
1447 a problem we can force people using SONAMEs. */
1449 /* We delay initializing the path structure until we got the dynamic
1450 information for the program. */
1453 main_map->l_map_end = 0;
1454 main_map->l_text_end = 0;
1455 /* Perhaps the executable has no PT_LOAD header entries at all. */
1456 main_map->l_map_start = ~0;
1457 /* And it was opened directly. */
1458 ++main_map->l_direct_opencount;
1460 /* Scan the program header table for the dynamic section. */
1461 for (ph = phdr; ph < &phdr[phnum]; ++ph)
1462 switch (ph->p_type)
1464 case PT_PHDR:
1465 /* Find out the load address. */
1466 main_map->l_addr = (ElfW(Addr)) phdr - ph->p_vaddr;
1467 break;
1468 case PT_DYNAMIC:
1469 /* This tells us where to find the dynamic section,
1470 which tells us everything we need to do. */
1471 main_map->l_ld = (void *) main_map->l_addr + ph->p_vaddr;
1472 break;
1473 case PT_INTERP:
1474 /* This "interpreter segment" was used by the program loader to
1475 find the program interpreter, which is this program itself, the
1476 dynamic linker. We note what name finds us, so that a future
1477 dlopen call or DT_NEEDED entry, for something that wants to link
1478 against the dynamic linker as a shared library, will know that
1479 the shared object is already loaded. */
1480 _dl_rtld_libname.name = ((const char *) main_map->l_addr
1481 + ph->p_vaddr);
1482 /* _dl_rtld_libname.next = NULL; Already zero. */
1483 GL(dl_rtld_map).l_libname = &_dl_rtld_libname;
1485 /* Ordinarilly, we would get additional names for the loader from
1486 our DT_SONAME. This can't happen if we were actually linked as
1487 a static executable (detect this case when we have no DYNAMIC).
1488 If so, assume the filename component of the interpreter path to
1489 be our SONAME, and add it to our name list. */
1490 if (GL(dl_rtld_map).l_ld == NULL)
1492 const char *p = NULL;
1493 const char *cp = _dl_rtld_libname.name;
1495 /* Find the filename part of the path. */
1496 while (*cp != '\0')
1497 if (*cp++ == '/')
1498 p = cp;
1500 if (p != NULL)
1502 _dl_rtld_libname2.name = p;
1503 /* _dl_rtld_libname2.next = NULL; Already zero. */
1504 _dl_rtld_libname.next = &_dl_rtld_libname2;
1508 has_interp = true;
1509 break;
1510 case PT_LOAD:
1512 ElfW(Addr) mapstart;
1513 ElfW(Addr) allocend;
1515 /* Remember where the main program starts in memory. */
1516 mapstart = (main_map->l_addr
1517 + (ph->p_vaddr & ~(GLRO(dl_pagesize) - 1)));
1518 if (main_map->l_map_start > mapstart)
1519 main_map->l_map_start = mapstart;
1521 /* Also where it ends. */
1522 allocend = main_map->l_addr + ph->p_vaddr + ph->p_memsz;
1523 if (main_map->l_map_end < allocend)
1524 main_map->l_map_end = allocend;
1525 if ((ph->p_flags & PF_X) && allocend > main_map->l_text_end)
1526 main_map->l_text_end = allocend;
1528 break;
1530 case PT_TLS:
1531 if (ph->p_memsz > 0)
1533 /* Note that in the case the dynamic linker we duplicate work
1534 here since we read the PT_TLS entry already in
1535 _dl_start_final. But the result is repeatable so do not
1536 check for this special but unimportant case. */
1537 main_map->l_tls_blocksize = ph->p_memsz;
1538 main_map->l_tls_align = ph->p_align;
1539 if (ph->p_align == 0)
1540 main_map->l_tls_firstbyte_offset = 0;
1541 else
1542 main_map->l_tls_firstbyte_offset = (ph->p_vaddr
1543 & (ph->p_align - 1));
1544 main_map->l_tls_initimage_size = ph->p_filesz;
1545 main_map->l_tls_initimage = (void *) ph->p_vaddr;
1547 /* This image gets the ID one. */
1548 GL(dl_tls_max_dtv_idx) = main_map->l_tls_modid = 1;
1550 break;
1552 case PT_GNU_STACK:
1553 GL(dl_stack_flags) = ph->p_flags;
1554 break;
1556 case PT_GNU_RELRO:
1557 main_map->l_relro_addr = ph->p_vaddr;
1558 main_map->l_relro_size = ph->p_memsz;
1559 break;
1561 /* Process program headers again, but scan them backwards so
1562 that PT_NOTE can be skipped if PT_GNU_PROPERTY exits. */
1563 for (ph = &phdr[phnum]; ph != phdr; --ph)
1564 switch (ph[-1].p_type)
1566 case PT_NOTE:
1567 _dl_process_pt_note (main_map, -1, &ph[-1]);
1568 break;
1569 case PT_GNU_PROPERTY:
1570 _dl_process_pt_gnu_property (main_map, -1, &ph[-1]);
1571 break;
1574 /* Adjust the address of the TLS initialization image in case
1575 the executable is actually an ET_DYN object. */
1576 if (main_map->l_tls_initimage != NULL)
1577 main_map->l_tls_initimage
1578 = (char *) main_map->l_tls_initimage + main_map->l_addr;
1579 if (! main_map->l_map_end)
1580 main_map->l_map_end = ~0;
1581 if (! main_map->l_text_end)
1582 main_map->l_text_end = ~0;
1583 if (! GL(dl_rtld_map).l_libname && GL(dl_rtld_map).l_name)
1585 /* We were invoked directly, so the program might not have a
1586 PT_INTERP. */
1587 _dl_rtld_libname.name = GL(dl_rtld_map).l_name;
1588 /* _dl_rtld_libname.next = NULL; Already zero. */
1589 GL(dl_rtld_map).l_libname = &_dl_rtld_libname;
1591 else
1592 assert (GL(dl_rtld_map).l_libname); /* How else did we get here? */
1594 /* If the current libname is different from the SONAME, add the
1595 latter as well. */
1596 if (GL(dl_rtld_map).l_info[DT_SONAME] != NULL
1597 && strcmp (GL(dl_rtld_map).l_libname->name,
1598 (const char *) D_PTR (&GL(dl_rtld_map), l_info[DT_STRTAB])
1599 + GL(dl_rtld_map).l_info[DT_SONAME]->d_un.d_val) != 0)
1601 static struct libname_list newname;
1602 newname.name = ((char *) D_PTR (&GL(dl_rtld_map), l_info[DT_STRTAB])
1603 + GL(dl_rtld_map).l_info[DT_SONAME]->d_un.d_ptr);
1604 newname.next = NULL;
1605 newname.dont_free = 1;
1607 assert (GL(dl_rtld_map).l_libname->next == NULL);
1608 GL(dl_rtld_map).l_libname->next = &newname;
1610 /* The ld.so must be relocated since otherwise loading audit modules
1611 will fail since they reuse the very same ld.so. */
1612 assert (GL(dl_rtld_map).l_relocated);
1614 if (! rtld_is_main)
1616 /* Extract the contents of the dynamic section for easy access. */
1617 elf_get_dynamic_info (main_map, NULL);
1619 /* If the main map is libc.so, update the base namespace to
1620 refer to this map. If libc.so is loaded later, this happens
1621 in _dl_map_object_from_fd. */
1622 if (main_map->l_info[DT_SONAME] != NULL
1623 && (strcmp (((const char *) D_PTR (main_map, l_info[DT_STRTAB])
1624 + main_map->l_info[DT_SONAME]->d_un.d_val), LIBC_SO)
1625 == 0))
1626 GL(dl_ns)[LM_ID_BASE].libc_map = main_map;
1628 /* Set up our cache of pointers into the hash table. */
1629 _dl_setup_hash (main_map);
1632 if (__glibc_unlikely (state.mode == rtld_mode_verify))
1634 /* We were called just to verify that this is a dynamic
1635 executable using us as the program interpreter. Exit with an
1636 error if we were not able to load the binary or no interpreter
1637 is specified (i.e., this is no dynamically linked binary. */
1638 if (main_map->l_ld == NULL)
1639 _exit (1);
1641 /* We allow here some platform specific code. */
1642 #ifdef DISTINGUISH_LIB_VERSIONS
1643 DISTINGUISH_LIB_VERSIONS;
1644 #endif
1645 _exit (has_interp ? 0 : 2);
1648 struct link_map **first_preload = &GL(dl_rtld_map).l_next;
1649 /* Set up the data structures for the system-supplied DSO early,
1650 so they can influence _dl_init_paths. */
1651 setup_vdso (main_map, &first_preload);
1653 /* With vDSO setup we can initialize the function pointers. */
1654 setup_vdso_pointers ();
1656 #ifdef DL_SYSDEP_OSCHECK
1657 DL_SYSDEP_OSCHECK (_dl_fatal_printf);
1658 #endif
1660 /* Initialize the data structures for the search paths for shared
1661 objects. */
1662 call_init_paths (&state);
1664 /* Initialize _r_debug. */
1665 struct r_debug *r = _dl_debug_initialize (GL(dl_rtld_map).l_addr,
1666 LM_ID_BASE);
1667 r->r_state = RT_CONSISTENT;
1669 /* Put the link_map for ourselves on the chain so it can be found by
1670 name. Note that at this point the global chain of link maps contains
1671 exactly one element, which is pointed to by dl_loaded. */
1672 if (! GL(dl_rtld_map).l_name)
1673 /* If not invoked directly, the dynamic linker shared object file was
1674 found by the PT_INTERP name. */
1675 GL(dl_rtld_map).l_name = (char *) GL(dl_rtld_map).l_libname->name;
1676 GL(dl_rtld_map).l_type = lt_library;
1677 main_map->l_next = &GL(dl_rtld_map);
1678 GL(dl_rtld_map).l_prev = main_map;
1679 ++GL(dl_ns)[LM_ID_BASE]._ns_nloaded;
1680 ++GL(dl_load_adds);
1682 /* If LD_USE_LOAD_BIAS env variable has not been seen, default
1683 to not using bias for non-prelinked PIEs and libraries
1684 and using it for executables or prelinked PIEs or libraries. */
1685 if (GLRO(dl_use_load_bias) == (ElfW(Addr)) -2)
1686 GLRO(dl_use_load_bias) = main_map->l_addr == 0 ? -1 : 0;
1688 /* Set up the program header information for the dynamic linker
1689 itself. It is needed in the dl_iterate_phdr callbacks. */
1690 const ElfW(Ehdr) *rtld_ehdr;
1692 /* Starting from binutils-2.23, the linker will define the magic symbol
1693 __ehdr_start to point to our own ELF header if it is visible in a
1694 segment that also includes the phdrs. If that's not available, we use
1695 the old method that assumes the beginning of the file is part of the
1696 lowest-addressed PT_LOAD segment. */
1697 #ifdef HAVE_EHDR_START
1698 extern const ElfW(Ehdr) __ehdr_start __attribute__ ((visibility ("hidden")));
1699 rtld_ehdr = &__ehdr_start;
1700 #else
1701 rtld_ehdr = (void *) GL(dl_rtld_map).l_map_start;
1702 #endif
1703 assert (rtld_ehdr->e_ehsize == sizeof *rtld_ehdr);
1704 assert (rtld_ehdr->e_phentsize == sizeof (ElfW(Phdr)));
1706 const ElfW(Phdr) *rtld_phdr = (const void *) rtld_ehdr + rtld_ehdr->e_phoff;
1708 GL(dl_rtld_map).l_phdr = rtld_phdr;
1709 GL(dl_rtld_map).l_phnum = rtld_ehdr->e_phnum;
1712 /* PT_GNU_RELRO is usually the last phdr. */
1713 size_t cnt = rtld_ehdr->e_phnum;
1714 while (cnt-- > 0)
1715 if (rtld_phdr[cnt].p_type == PT_GNU_RELRO)
1717 GL(dl_rtld_map).l_relro_addr = rtld_phdr[cnt].p_vaddr;
1718 GL(dl_rtld_map).l_relro_size = rtld_phdr[cnt].p_memsz;
1719 break;
1722 /* Add the dynamic linker to the TLS list if it also uses TLS. */
1723 if (GL(dl_rtld_map).l_tls_blocksize != 0)
1724 /* Assign a module ID. Do this before loading any audit modules. */
1725 GL(dl_rtld_map).l_tls_modid = _dl_next_tls_modid ();
1727 audit_list_add_dynamic_tag (&state.audit_list, main_map, DT_AUDIT);
1728 audit_list_add_dynamic_tag (&state.audit_list, main_map, DT_DEPAUDIT);
1730 /* At this point, all data has been obtained that is included in the
1731 --help output. */
1732 if (__glibc_unlikely (state.mode == rtld_mode_help))
1733 _dl_help (ld_so_name, &state);
1735 /* If we have auditing DSOs to load, do it now. */
1736 bool need_security_init = true;
1737 if (state.audit_list.length > 0)
1739 size_t naudit = audit_list_count (&state.audit_list);
1741 /* Since we start using the auditing DSOs right away we need to
1742 initialize the data structures now. */
1743 tcbp = init_tls (naudit);
1745 /* Initialize security features. We need to do it this early
1746 since otherwise the constructors of the audit libraries will
1747 use different values (especially the pointer guard) and will
1748 fail later on. */
1749 security_init ();
1750 need_security_init = false;
1752 load_audit_modules (main_map, &state.audit_list);
1754 /* The count based on audit strings may overestimate the number
1755 of audit modules that got loaded, but not underestimate. */
1756 assert (GLRO(dl_naudit) <= naudit);
1759 /* Keep track of the currently loaded modules to count how many
1760 non-audit modules which use TLS are loaded. */
1761 size_t count_modids = _dl_count_modids ();
1763 /* Set up debugging before the debugger is notified for the first time. */
1764 #ifdef ELF_MACHINE_DEBUG_SETUP
1765 /* Some machines (e.g. MIPS) don't use DT_DEBUG in this way. */
1766 ELF_MACHINE_DEBUG_SETUP (main_map, r);
1767 ELF_MACHINE_DEBUG_SETUP (&GL(dl_rtld_map), r);
1768 #else
1769 if (main_map->l_info[DT_DEBUG] != NULL)
1770 /* There is a DT_DEBUG entry in the dynamic section. Fill it in
1771 with the run-time address of the r_debug structure */
1772 main_map->l_info[DT_DEBUG]->d_un.d_ptr = (ElfW(Addr)) r;
1774 /* Fill in the pointer in the dynamic linker's own dynamic section, in
1775 case you run gdb on the dynamic linker directly. */
1776 if (GL(dl_rtld_map).l_info[DT_DEBUG] != NULL)
1777 GL(dl_rtld_map).l_info[DT_DEBUG]->d_un.d_ptr = (ElfW(Addr)) r;
1778 #endif
1780 /* We start adding objects. */
1781 r->r_state = RT_ADD;
1782 _dl_debug_state ();
1783 LIBC_PROBE (init_start, 2, LM_ID_BASE, r);
1785 /* Auditing checkpoint: we are ready to signal that the initial map
1786 is being constructed. */
1787 if (__glibc_unlikely (GLRO(dl_naudit) > 0))
1789 struct audit_ifaces *afct = GLRO(dl_audit);
1790 for (unsigned int cnt = 0; cnt < GLRO(dl_naudit); ++cnt)
1792 if (afct->activity != NULL)
1793 afct->activity (&link_map_audit_state (main_map, cnt)->cookie,
1794 LA_ACT_ADD);
1796 afct = afct->next;
1800 /* We have two ways to specify objects to preload: via environment
1801 variable and via the file /etc/ld.so.preload. The latter can also
1802 be used when security is enabled. */
1803 assert (*first_preload == NULL);
1804 struct link_map **preloads = NULL;
1805 unsigned int npreloads = 0;
1807 if (__glibc_unlikely (state.preloadlist != NULL))
1809 RTLD_TIMING_VAR (start);
1810 rtld_timer_start (&start);
1811 npreloads += handle_preload_list (state.preloadlist, main_map,
1812 "LD_PRELOAD");
1813 rtld_timer_accum (&load_time, start);
1816 if (__glibc_unlikely (state.preloadarg != NULL))
1818 RTLD_TIMING_VAR (start);
1819 rtld_timer_start (&start);
1820 npreloads += handle_preload_list (state.preloadarg, main_map,
1821 "--preload");
1822 rtld_timer_accum (&load_time, start);
1825 /* There usually is no ld.so.preload file, it should only be used
1826 for emergencies and testing. So the open call etc should usually
1827 fail. Using access() on a non-existing file is faster than using
1828 open(). So we do this first. If it succeeds we do almost twice
1829 the work but this does not matter, since it is not for production
1830 use. */
1831 static const char preload_file[] = "/etc/ld.so.preload";
1832 if (__glibc_unlikely (__access (preload_file, R_OK) == 0))
1834 /* Read the contents of the file. */
1835 file = _dl_sysdep_read_whole_file (preload_file, &file_size,
1836 PROT_READ | PROT_WRITE);
1837 if (__glibc_unlikely (file != MAP_FAILED))
1839 /* Parse the file. It contains names of libraries to be loaded,
1840 separated by white spaces or `:'. It may also contain
1841 comments introduced by `#'. */
1842 char *problem;
1843 char *runp;
1844 size_t rest;
1846 /* Eliminate comments. */
1847 runp = file;
1848 rest = file_size;
1849 while (rest > 0)
1851 char *comment = memchr (runp, '#', rest);
1852 if (comment == NULL)
1853 break;
1855 rest -= comment - runp;
1857 *comment = ' ';
1858 while (--rest > 0 && *++comment != '\n');
1861 /* We have one problematic case: if we have a name at the end of
1862 the file without a trailing terminating characters, we cannot
1863 place the \0. Handle the case separately. */
1864 if (file[file_size - 1] != ' ' && file[file_size - 1] != '\t'
1865 && file[file_size - 1] != '\n' && file[file_size - 1] != ':')
1867 problem = &file[file_size];
1868 while (problem > file && problem[-1] != ' '
1869 && problem[-1] != '\t'
1870 && problem[-1] != '\n' && problem[-1] != ':')
1871 --problem;
1873 if (problem > file)
1874 problem[-1] = '\0';
1876 else
1878 problem = NULL;
1879 file[file_size - 1] = '\0';
1882 RTLD_TIMING_VAR (start);
1883 rtld_timer_start (&start);
1885 if (file != problem)
1887 char *p;
1888 runp = file;
1889 while ((p = strsep (&runp, ": \t\n")) != NULL)
1890 if (p[0] != '\0')
1891 npreloads += do_preload (p, main_map, preload_file);
1894 if (problem != NULL)
1896 char *p = strndupa (problem, file_size - (problem - file));
1898 npreloads += do_preload (p, main_map, preload_file);
1901 rtld_timer_accum (&load_time, start);
1903 /* We don't need the file anymore. */
1904 __munmap (file, file_size);
1908 if (__glibc_unlikely (*first_preload != NULL))
1910 /* Set up PRELOADS with a vector of the preloaded libraries. */
1911 struct link_map *l = *first_preload;
1912 preloads = __alloca (npreloads * sizeof preloads[0]);
1913 i = 0;
1916 preloads[i++] = l;
1917 l = l->l_next;
1918 } while (l);
1919 assert (i == npreloads);
1922 /* Load all the libraries specified by DT_NEEDED entries. If LD_PRELOAD
1923 specified some libraries to load, these are inserted before the actual
1924 dependencies in the executable's searchlist for symbol resolution. */
1926 RTLD_TIMING_VAR (start);
1927 rtld_timer_start (&start);
1928 _dl_map_object_deps (main_map, preloads, npreloads,
1929 state.mode == rtld_mode_trace, 0);
1930 rtld_timer_accum (&load_time, start);
1933 /* Mark all objects as being in the global scope. */
1934 for (i = main_map->l_searchlist.r_nlist; i > 0; )
1935 main_map->l_searchlist.r_list[--i]->l_global = 1;
1937 /* Remove _dl_rtld_map from the chain. */
1938 GL(dl_rtld_map).l_prev->l_next = GL(dl_rtld_map).l_next;
1939 if (GL(dl_rtld_map).l_next != NULL)
1940 GL(dl_rtld_map).l_next->l_prev = GL(dl_rtld_map).l_prev;
1942 for (i = 1; i < main_map->l_searchlist.r_nlist; ++i)
1943 if (main_map->l_searchlist.r_list[i] == &GL(dl_rtld_map))
1944 break;
1946 bool rtld_multiple_ref = false;
1947 if (__glibc_likely (i < main_map->l_searchlist.r_nlist))
1949 /* Some DT_NEEDED entry referred to the interpreter object itself, so
1950 put it back in the list of visible objects. We insert it into the
1951 chain in symbol search order because gdb uses the chain's order as
1952 its symbol search order. */
1953 rtld_multiple_ref = true;
1955 GL(dl_rtld_map).l_prev = main_map->l_searchlist.r_list[i - 1];
1956 if (__glibc_likely (state.mode == rtld_mode_normal))
1958 GL(dl_rtld_map).l_next = (i + 1 < main_map->l_searchlist.r_nlist
1959 ? main_map->l_searchlist.r_list[i + 1]
1960 : NULL);
1961 #ifdef NEED_DL_SYSINFO_DSO
1962 if (GLRO(dl_sysinfo_map) != NULL
1963 && GL(dl_rtld_map).l_prev->l_next == GLRO(dl_sysinfo_map)
1964 && GL(dl_rtld_map).l_next != GLRO(dl_sysinfo_map))
1965 GL(dl_rtld_map).l_prev = GLRO(dl_sysinfo_map);
1966 #endif
1968 else
1969 /* In trace mode there might be an invisible object (which we
1970 could not find) after the previous one in the search list.
1971 In this case it doesn't matter much where we put the
1972 interpreter object, so we just initialize the list pointer so
1973 that the assertion below holds. */
1974 GL(dl_rtld_map).l_next = GL(dl_rtld_map).l_prev->l_next;
1976 assert (GL(dl_rtld_map).l_prev->l_next == GL(dl_rtld_map).l_next);
1977 GL(dl_rtld_map).l_prev->l_next = &GL(dl_rtld_map);
1978 if (GL(dl_rtld_map).l_next != NULL)
1980 assert (GL(dl_rtld_map).l_next->l_prev == GL(dl_rtld_map).l_prev);
1981 GL(dl_rtld_map).l_next->l_prev = &GL(dl_rtld_map);
1985 /* Now let us see whether all libraries are available in the
1986 versions we need. */
1988 struct version_check_args args;
1989 args.doexit = state.mode == rtld_mode_normal;
1990 args.dotrace = state.mode == rtld_mode_trace;
1991 _dl_receive_error (print_missing_version, version_check_doit, &args);
1994 /* We do not initialize any of the TLS functionality unless any of the
1995 initial modules uses TLS. This makes dynamic loading of modules with
1996 TLS impossible, but to support it requires either eagerly doing setup
1997 now or lazily doing it later. Doing it now makes us incompatible with
1998 an old kernel that can't perform TLS_INIT_TP, even if no TLS is ever
1999 used. Trying to do it lazily is too hairy to try when there could be
2000 multiple threads (from a non-TLS-using libpthread). */
2001 bool was_tls_init_tp_called = tls_init_tp_called;
2002 if (tcbp == NULL)
2003 tcbp = init_tls (0);
2005 if (__glibc_likely (need_security_init))
2006 /* Initialize security features. But only if we have not done it
2007 earlier. */
2008 security_init ();
2010 if (__glibc_unlikely (state.mode != rtld_mode_normal))
2012 /* We were run just to list the shared libraries. It is
2013 important that we do this before real relocation, because the
2014 functions we call below for output may no longer work properly
2015 after relocation. */
2016 struct link_map *l;
2018 if (GLRO(dl_debug_mask) & DL_DEBUG_PRELINK)
2020 struct r_scope_elem *scope = &main_map->l_searchlist;
2022 for (i = 0; i < scope->r_nlist; i++)
2024 l = scope->r_list [i];
2025 if (l->l_faked)
2027 _dl_printf ("\t%s => not found\n", l->l_libname->name);
2028 continue;
2030 if (_dl_name_match_p (GLRO(dl_trace_prelink), l))
2031 GLRO(dl_trace_prelink_map) = l;
2032 _dl_printf ("\t%s => %s (0x%0*Zx, 0x%0*Zx)",
2033 DSO_FILENAME (l->l_libname->name),
2034 DSO_FILENAME (l->l_name),
2035 (int) sizeof l->l_map_start * 2,
2036 (size_t) l->l_map_start,
2037 (int) sizeof l->l_addr * 2,
2038 (size_t) l->l_addr);
2040 if (l->l_tls_modid)
2041 _dl_printf (" TLS(0x%Zx, 0x%0*Zx)\n", l->l_tls_modid,
2042 (int) sizeof l->l_tls_offset * 2,
2043 (size_t) l->l_tls_offset);
2044 else
2045 _dl_printf ("\n");
2048 else if (GLRO(dl_debug_mask) & DL_DEBUG_UNUSED)
2050 /* Look through the dependencies of the main executable
2051 and determine which of them is not actually
2052 required. */
2053 struct link_map *l = main_map;
2055 /* Relocate the main executable. */
2056 struct relocate_args args = { .l = l,
2057 .reloc_mode = ((GLRO(dl_lazy)
2058 ? RTLD_LAZY : 0)
2059 | __RTLD_NOIFUNC) };
2060 _dl_receive_error (print_unresolved, relocate_doit, &args);
2062 /* This loop depends on the dependencies of the executable to
2063 correspond in number and order to the DT_NEEDED entries. */
2064 ElfW(Dyn) *dyn = main_map->l_ld;
2065 bool first = true;
2066 while (dyn->d_tag != DT_NULL)
2068 if (dyn->d_tag == DT_NEEDED)
2070 l = l->l_next;
2071 #ifdef NEED_DL_SYSINFO_DSO
2072 /* Skip the VDSO since it's not part of the list
2073 of objects we brought in via DT_NEEDED entries. */
2074 if (l == GLRO(dl_sysinfo_map))
2075 l = l->l_next;
2076 #endif
2077 if (!l->l_used)
2079 if (first)
2081 _dl_printf ("Unused direct dependencies:\n");
2082 first = false;
2085 _dl_printf ("\t%s\n", l->l_name);
2089 ++dyn;
2092 _exit (first != true);
2094 else if (! main_map->l_info[DT_NEEDED])
2095 _dl_printf ("\tstatically linked\n");
2096 else
2098 for (l = main_map->l_next; l; l = l->l_next)
2099 if (l->l_faked)
2100 /* The library was not found. */
2101 _dl_printf ("\t%s => not found\n", l->l_libname->name);
2102 else if (strcmp (l->l_libname->name, l->l_name) == 0)
2103 _dl_printf ("\t%s (0x%0*Zx)\n", l->l_libname->name,
2104 (int) sizeof l->l_map_start * 2,
2105 (size_t) l->l_map_start);
2106 else
2107 _dl_printf ("\t%s => %s (0x%0*Zx)\n", l->l_libname->name,
2108 l->l_name, (int) sizeof l->l_map_start * 2,
2109 (size_t) l->l_map_start);
2112 if (__glibc_unlikely (state.mode != rtld_mode_trace))
2113 for (i = 1; i < (unsigned int) _dl_argc; ++i)
2115 const ElfW(Sym) *ref = NULL;
2116 ElfW(Addr) loadbase;
2117 lookup_t result;
2119 result = _dl_lookup_symbol_x (_dl_argv[i], main_map,
2120 &ref, main_map->l_scope,
2121 NULL, ELF_RTYPE_CLASS_PLT,
2122 DL_LOOKUP_ADD_DEPENDENCY, NULL);
2124 loadbase = LOOKUP_VALUE_ADDRESS (result, false);
2126 _dl_printf ("%s found at 0x%0*Zd in object at 0x%0*Zd\n",
2127 _dl_argv[i],
2128 (int) sizeof ref->st_value * 2,
2129 (size_t) ref->st_value,
2130 (int) sizeof loadbase * 2, (size_t) loadbase);
2132 else
2134 /* If LD_WARN is set, warn about undefined symbols. */
2135 if (GLRO(dl_lazy) >= 0 && GLRO(dl_verbose))
2137 /* We have to do symbol dependency testing. */
2138 struct relocate_args args;
2139 unsigned int i;
2141 args.reloc_mode = ((GLRO(dl_lazy) ? RTLD_LAZY : 0)
2142 | __RTLD_NOIFUNC);
2144 i = main_map->l_searchlist.r_nlist;
2145 while (i-- > 0)
2147 struct link_map *l = main_map->l_initfini[i];
2148 if (l != &GL(dl_rtld_map) && ! l->l_faked)
2150 args.l = l;
2151 _dl_receive_error (print_unresolved, relocate_doit,
2152 &args);
2156 if ((GLRO(dl_debug_mask) & DL_DEBUG_PRELINK)
2157 && rtld_multiple_ref)
2159 /* Mark the link map as not yet relocated again. */
2160 GL(dl_rtld_map).l_relocated = 0;
2161 _dl_relocate_object (&GL(dl_rtld_map),
2162 main_map->l_scope, __RTLD_NOIFUNC, 0);
2165 #define VERNEEDTAG (DT_NUM + DT_THISPROCNUM + DT_VERSIONTAGIDX (DT_VERNEED))
2166 if (state.version_info)
2168 /* Print more information. This means here, print information
2169 about the versions needed. */
2170 int first = 1;
2171 struct link_map *map;
2173 for (map = main_map; map != NULL; map = map->l_next)
2175 const char *strtab;
2176 ElfW(Dyn) *dyn = map->l_info[VERNEEDTAG];
2177 ElfW(Verneed) *ent;
2179 if (dyn == NULL)
2180 continue;
2182 strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]);
2183 ent = (ElfW(Verneed) *) (map->l_addr + dyn->d_un.d_ptr);
2185 if (first)
2187 _dl_printf ("\n\tVersion information:\n");
2188 first = 0;
2191 _dl_printf ("\t%s:\n", DSO_FILENAME (map->l_name));
2193 while (1)
2195 ElfW(Vernaux) *aux;
2196 struct link_map *needed;
2198 needed = find_needed (strtab + ent->vn_file);
2199 aux = (ElfW(Vernaux) *) ((char *) ent + ent->vn_aux);
2201 while (1)
2203 const char *fname = NULL;
2205 if (needed != NULL
2206 && match_version (strtab + aux->vna_name,
2207 needed))
2208 fname = needed->l_name;
2210 _dl_printf ("\t\t%s (%s) %s=> %s\n",
2211 strtab + ent->vn_file,
2212 strtab + aux->vna_name,
2213 aux->vna_flags & VER_FLG_WEAK
2214 ? "[WEAK] " : "",
2215 fname ?: "not found");
2217 if (aux->vna_next == 0)
2218 /* No more symbols. */
2219 break;
2221 /* Next symbol. */
2222 aux = (ElfW(Vernaux) *) ((char *) aux
2223 + aux->vna_next);
2226 if (ent->vn_next == 0)
2227 /* No more dependencies. */
2228 break;
2230 /* Next dependency. */
2231 ent = (ElfW(Verneed) *) ((char *) ent + ent->vn_next);
2237 _exit (0);
2240 if (main_map->l_info[ADDRIDX (DT_GNU_LIBLIST)]
2241 && ! __builtin_expect (GLRO(dl_profile) != NULL, 0)
2242 && ! __builtin_expect (GLRO(dl_dynamic_weak), 0))
2244 ElfW(Lib) *liblist, *liblistend;
2245 struct link_map **r_list, **r_listend, *l;
2246 const char *strtab = (const void *) D_PTR (main_map, l_info[DT_STRTAB]);
2248 assert (main_map->l_info[VALIDX (DT_GNU_LIBLISTSZ)] != NULL);
2249 liblist = (ElfW(Lib) *)
2250 main_map->l_info[ADDRIDX (DT_GNU_LIBLIST)]->d_un.d_ptr;
2251 liblistend = (ElfW(Lib) *)
2252 ((char *) liblist
2253 + main_map->l_info[VALIDX (DT_GNU_LIBLISTSZ)]->d_un.d_val);
2254 r_list = main_map->l_searchlist.r_list;
2255 r_listend = r_list + main_map->l_searchlist.r_nlist;
2257 for (; r_list < r_listend && liblist < liblistend; r_list++)
2259 l = *r_list;
2261 if (l == main_map)
2262 continue;
2264 /* If the library is not mapped where it should, fail. */
2265 if (l->l_addr)
2266 break;
2268 /* Next, check if checksum matches. */
2269 if (l->l_info [VALIDX(DT_CHECKSUM)] == NULL
2270 || l->l_info [VALIDX(DT_CHECKSUM)]->d_un.d_val
2271 != liblist->l_checksum)
2272 break;
2274 if (l->l_info [VALIDX(DT_GNU_PRELINKED)] == NULL
2275 || l->l_info [VALIDX(DT_GNU_PRELINKED)]->d_un.d_val
2276 != liblist->l_time_stamp)
2277 break;
2279 if (! _dl_name_match_p (strtab + liblist->l_name, l))
2280 break;
2282 ++liblist;
2286 if (r_list == r_listend && liblist == liblistend)
2287 prelinked = true;
2289 if (__glibc_unlikely (GLRO(dl_debug_mask) & DL_DEBUG_LIBS))
2290 _dl_debug_printf ("\nprelink checking: %s\n",
2291 prelinked ? "ok" : "failed");
2295 /* Now set up the variable which helps the assembler startup code. */
2296 GL(dl_ns)[LM_ID_BASE]._ns_main_searchlist = &main_map->l_searchlist;
2298 /* Save the information about the original global scope list since
2299 we need it in the memory handling later. */
2300 GLRO(dl_initial_searchlist) = *GL(dl_ns)[LM_ID_BASE]._ns_main_searchlist;
2302 /* Remember the last search directory added at startup, now that
2303 malloc will no longer be the one from dl-minimal.c. As a side
2304 effect, this marks ld.so as initialized, so that the rtld_active
2305 function returns true from now on. */
2306 GLRO(dl_init_all_dirs) = GL(dl_all_dirs);
2308 /* Print scope information. */
2309 if (__glibc_unlikely (GLRO(dl_debug_mask) & DL_DEBUG_SCOPES))
2311 _dl_debug_printf ("\nInitial object scopes\n");
2313 for (struct link_map *l = main_map; l != NULL; l = l->l_next)
2314 _dl_show_scope (l, 0);
2317 _rtld_main_check (main_map, _dl_argv[0]);
2319 if (prelinked)
2321 if (main_map->l_info [ADDRIDX (DT_GNU_CONFLICT)] != NULL)
2323 ElfW(Rela) *conflict, *conflictend;
2325 RTLD_TIMING_VAR (start);
2326 rtld_timer_start (&start);
2328 assert (main_map->l_info [VALIDX (DT_GNU_CONFLICTSZ)] != NULL);
2329 conflict = (ElfW(Rela) *)
2330 main_map->l_info [ADDRIDX (DT_GNU_CONFLICT)]->d_un.d_ptr;
2331 conflictend = (ElfW(Rela) *)
2332 ((char *) conflict
2333 + main_map->l_info [VALIDX (DT_GNU_CONFLICTSZ)]->d_un.d_val);
2334 _dl_resolve_conflicts (main_map, conflict, conflictend);
2336 rtld_timer_stop (&relocate_time, start);
2339 /* The library defining malloc has already been relocated due to
2340 prelinking. Resolve the malloc symbols for the dynamic
2341 loader. */
2342 __rtld_malloc_init_real (main_map);
2344 /* Likewise for the locking implementation. */
2345 __rtld_mutex_init ();
2347 /* Mark all the objects so we know they have been already relocated. */
2348 for (struct link_map *l = main_map; l != NULL; l = l->l_next)
2350 l->l_relocated = 1;
2351 if (l->l_relro_size)
2352 _dl_protect_relro (l);
2354 /* Add object to slot information data if necessasy. */
2355 if (l->l_tls_blocksize != 0 && tls_init_tp_called)
2356 _dl_add_to_slotinfo (l, true);
2359 else
2361 /* Now we have all the objects loaded. Relocate them all except for
2362 the dynamic linker itself. We do this in reverse order so that copy
2363 relocs of earlier objects overwrite the data written by later
2364 objects. We do not re-relocate the dynamic linker itself in this
2365 loop because that could result in the GOT entries for functions we
2366 call being changed, and that would break us. It is safe to relocate
2367 the dynamic linker out of order because it has no copy relocs (we
2368 know that because it is self-contained). */
2370 int consider_profiling = GLRO(dl_profile) != NULL;
2372 /* If we are profiling we also must do lazy reloaction. */
2373 GLRO(dl_lazy) |= consider_profiling;
2375 RTLD_TIMING_VAR (start);
2376 rtld_timer_start (&start);
2377 unsigned i = main_map->l_searchlist.r_nlist;
2378 while (i-- > 0)
2380 struct link_map *l = main_map->l_initfini[i];
2382 /* While we are at it, help the memory handling a bit. We have to
2383 mark some data structures as allocated with the fake malloc()
2384 implementation in ld.so. */
2385 struct libname_list *lnp = l->l_libname->next;
2387 while (__builtin_expect (lnp != NULL, 0))
2389 lnp->dont_free = 1;
2390 lnp = lnp->next;
2392 /* Also allocated with the fake malloc(). */
2393 l->l_free_initfini = 0;
2395 if (l != &GL(dl_rtld_map))
2396 _dl_relocate_object (l, l->l_scope, GLRO(dl_lazy) ? RTLD_LAZY : 0,
2397 consider_profiling);
2399 /* Add object to slot information data if necessasy. */
2400 if (l->l_tls_blocksize != 0 && tls_init_tp_called)
2401 _dl_add_to_slotinfo (l, true);
2403 rtld_timer_stop (&relocate_time, start);
2405 /* Now enable profiling if needed. Like the previous call,
2406 this has to go here because the calls it makes should use the
2407 rtld versions of the functions (particularly calloc()), but it
2408 needs to have _dl_profile_map set up by the relocator. */
2409 if (__glibc_unlikely (GL(dl_profile_map) != NULL))
2410 /* We must prepare the profiling. */
2411 _dl_start_profile ();
2414 if ((!was_tls_init_tp_called && GL(dl_tls_max_dtv_idx) > 0)
2415 || count_modids != _dl_count_modids ())
2416 ++GL(dl_tls_generation);
2418 /* Now that we have completed relocation, the initializer data
2419 for the TLS blocks has its final values and we can copy them
2420 into the main thread's TLS area, which we allocated above.
2421 Note: thread-local variables must only be accessed after completing
2422 the next step. */
2423 _dl_allocate_tls_init (tcbp);
2425 /* And finally install it for the main thread. */
2426 if (! tls_init_tp_called)
2428 const char *lossage = TLS_INIT_TP (tcbp);
2429 if (__glibc_unlikely (lossage != NULL))
2430 _dl_fatal_printf ("cannot set up thread-local storage: %s\n",
2431 lossage);
2432 __tls_init_tp ();
2435 /* Make sure no new search directories have been added. */
2436 assert (GLRO(dl_init_all_dirs) == GL(dl_all_dirs));
2438 if (! prelinked && rtld_multiple_ref)
2440 /* There was an explicit ref to the dynamic linker as a shared lib.
2441 Re-relocate ourselves with user-controlled symbol definitions.
2443 We must do this after TLS initialization in case after this
2444 re-relocation, we might call a user-supplied function
2445 (e.g. calloc from _dl_relocate_object) that uses TLS data. */
2447 /* The malloc implementation has been relocated, so resolving
2448 its symbols (and potentially calling IFUNC resolvers) is safe
2449 at this point. */
2450 __rtld_malloc_init_real (main_map);
2452 /* Likewise for the locking implementation. */
2453 __rtld_mutex_init ();
2455 RTLD_TIMING_VAR (start);
2456 rtld_timer_start (&start);
2458 /* Mark the link map as not yet relocated again. */
2459 GL(dl_rtld_map).l_relocated = 0;
2460 _dl_relocate_object (&GL(dl_rtld_map), main_map->l_scope, 0, 0);
2462 rtld_timer_accum (&relocate_time, start);
2465 /* Relocation is complete. Perform early libc initialization. This
2466 is the initial libc, even if audit modules have been loaded with
2467 other libcs. */
2468 _dl_call_libc_early_init (GL(dl_ns)[LM_ID_BASE].libc_map, true);
2470 /* Do any necessary cleanups for the startup OS interface code.
2471 We do these now so that no calls are made after rtld re-relocation
2472 which might be resolved to different functions than we expect.
2473 We cannot do this before relocating the other objects because
2474 _dl_relocate_object might need to call `mprotect' for DT_TEXTREL. */
2475 _dl_sysdep_start_cleanup ();
2477 #ifdef SHARED
2478 /* Auditing checkpoint: we have added all objects. */
2479 if (__glibc_unlikely (GLRO(dl_naudit) > 0))
2481 struct link_map *head = GL(dl_ns)[LM_ID_BASE]._ns_loaded;
2482 /* Do not call the functions for any auditing object. */
2483 if (head->l_auditing == 0)
2485 struct audit_ifaces *afct = GLRO(dl_audit);
2486 for (unsigned int cnt = 0; cnt < GLRO(dl_naudit); ++cnt)
2488 if (afct->activity != NULL)
2489 afct->activity (&link_map_audit_state (head, cnt)->cookie,
2490 LA_ACT_CONSISTENT);
2492 afct = afct->next;
2496 #endif
2498 /* Notify the debugger all new objects are now ready to go. We must re-get
2499 the address since by now the variable might be in another object. */
2500 r = _dl_debug_initialize (0, LM_ID_BASE);
2501 r->r_state = RT_CONSISTENT;
2502 _dl_debug_state ();
2503 LIBC_PROBE (init_complete, 2, LM_ID_BASE, r);
2505 #if defined USE_LDCONFIG && !defined MAP_COPY
2506 /* We must munmap() the cache file. */
2507 _dl_unload_cache ();
2508 #endif
2510 /* Once we return, _dl_sysdep_start will invoke
2511 the DT_INIT functions and then *USER_ENTRY. */
2514 /* This is a little helper function for resolving symbols while
2515 tracing the binary. */
2516 static void
2517 print_unresolved (int errcode __attribute__ ((unused)), const char *objname,
2518 const char *errstring)
2520 if (objname[0] == '\0')
2521 objname = RTLD_PROGNAME;
2522 _dl_error_printf ("%s (%s)\n", errstring, objname);
2525 /* This is a little helper function for resolving symbols while
2526 tracing the binary. */
2527 static void
2528 print_missing_version (int errcode __attribute__ ((unused)),
2529 const char *objname, const char *errstring)
2531 _dl_error_printf ("%s: %s: %s\n", RTLD_PROGNAME,
2532 objname, errstring);
2535 /* Process the string given as the parameter which explains which debugging
2536 options are enabled. */
2537 static void
2538 process_dl_debug (struct dl_main_state *state, const char *dl_debug)
2540 /* When adding new entries make sure that the maximal length of a name
2541 is correctly handled in the LD_DEBUG_HELP code below. */
2542 static const struct
2544 unsigned char len;
2545 const char name[10];
2546 const char helptext[41];
2547 unsigned short int mask;
2548 } debopts[] =
2550 #define LEN_AND_STR(str) sizeof (str) - 1, str
2551 { LEN_AND_STR ("libs"), "display library search paths",
2552 DL_DEBUG_LIBS | DL_DEBUG_IMPCALLS },
2553 { LEN_AND_STR ("reloc"), "display relocation processing",
2554 DL_DEBUG_RELOC | DL_DEBUG_IMPCALLS },
2555 { LEN_AND_STR ("files"), "display progress for input file",
2556 DL_DEBUG_FILES | DL_DEBUG_IMPCALLS },
2557 { LEN_AND_STR ("symbols"), "display symbol table processing",
2558 DL_DEBUG_SYMBOLS | DL_DEBUG_IMPCALLS },
2559 { LEN_AND_STR ("bindings"), "display information about symbol binding",
2560 DL_DEBUG_BINDINGS | DL_DEBUG_IMPCALLS },
2561 { LEN_AND_STR ("versions"), "display version dependencies",
2562 DL_DEBUG_VERSIONS | DL_DEBUG_IMPCALLS },
2563 { LEN_AND_STR ("scopes"), "display scope information",
2564 DL_DEBUG_SCOPES },
2565 { LEN_AND_STR ("all"), "all previous options combined",
2566 DL_DEBUG_LIBS | DL_DEBUG_RELOC | DL_DEBUG_FILES | DL_DEBUG_SYMBOLS
2567 | DL_DEBUG_BINDINGS | DL_DEBUG_VERSIONS | DL_DEBUG_IMPCALLS
2568 | DL_DEBUG_SCOPES },
2569 { LEN_AND_STR ("statistics"), "display relocation statistics",
2570 DL_DEBUG_STATISTICS },
2571 { LEN_AND_STR ("unused"), "determined unused DSOs",
2572 DL_DEBUG_UNUSED },
2573 { LEN_AND_STR ("help"), "display this help message and exit",
2574 DL_DEBUG_HELP },
2576 #define ndebopts (sizeof (debopts) / sizeof (debopts[0]))
2578 /* Skip separating white spaces and commas. */
2579 while (*dl_debug != '\0')
2581 if (*dl_debug != ' ' && *dl_debug != ',' && *dl_debug != ':')
2583 size_t cnt;
2584 size_t len = 1;
2586 while (dl_debug[len] != '\0' && dl_debug[len] != ' '
2587 && dl_debug[len] != ',' && dl_debug[len] != ':')
2588 ++len;
2590 for (cnt = 0; cnt < ndebopts; ++cnt)
2591 if (debopts[cnt].len == len
2592 && memcmp (dl_debug, debopts[cnt].name, len) == 0)
2594 GLRO(dl_debug_mask) |= debopts[cnt].mask;
2595 state->any_debug = true;
2596 break;
2599 if (cnt == ndebopts)
2601 /* Display a warning and skip everything until next
2602 separator. */
2603 char *copy = strndupa (dl_debug, len);
2604 _dl_error_printf ("\
2605 warning: debug option `%s' unknown; try LD_DEBUG=help\n", copy);
2608 dl_debug += len;
2609 continue;
2612 ++dl_debug;
2615 if (GLRO(dl_debug_mask) & DL_DEBUG_UNUSED)
2617 /* In order to get an accurate picture of whether a particular
2618 DT_NEEDED entry is actually used we have to process both
2619 the PLT and non-PLT relocation entries. */
2620 GLRO(dl_lazy) = 0;
2623 if (GLRO(dl_debug_mask) & DL_DEBUG_HELP)
2625 size_t cnt;
2627 _dl_printf ("\
2628 Valid options for the LD_DEBUG environment variable are:\n\n");
2630 for (cnt = 0; cnt < ndebopts; ++cnt)
2631 _dl_printf (" %.*s%s%s\n", debopts[cnt].len, debopts[cnt].name,
2632 " " + debopts[cnt].len - 3,
2633 debopts[cnt].helptext);
2635 _dl_printf ("\n\
2636 To direct the debugging output into a file instead of standard output\n\
2637 a filename can be specified using the LD_DEBUG_OUTPUT environment variable.\n");
2638 _exit (0);
2642 static void
2643 process_envvars (struct dl_main_state *state)
2645 char **runp = _environ;
2646 char *envline;
2647 char *debug_output = NULL;
2649 /* This is the default place for profiling data file. */
2650 GLRO(dl_profile_output)
2651 = &"/var/tmp\0/var/profile"[__libc_enable_secure ? 9 : 0];
2653 while ((envline = _dl_next_ld_env_entry (&runp)) != NULL)
2655 size_t len = 0;
2657 while (envline[len] != '\0' && envline[len] != '=')
2658 ++len;
2660 if (envline[len] != '=')
2661 /* This is a "LD_" variable at the end of the string without
2662 a '=' character. Ignore it since otherwise we will access
2663 invalid memory below. */
2664 continue;
2666 switch (len)
2668 case 4:
2669 /* Warning level, verbose or not. */
2670 if (memcmp (envline, "WARN", 4) == 0)
2671 GLRO(dl_verbose) = envline[5] != '\0';
2672 break;
2674 case 5:
2675 /* Debugging of the dynamic linker? */
2676 if (memcmp (envline, "DEBUG", 5) == 0)
2678 process_dl_debug (state, &envline[6]);
2679 break;
2681 if (memcmp (envline, "AUDIT", 5) == 0)
2682 audit_list_add_string (&state->audit_list, &envline[6]);
2683 break;
2685 case 7:
2686 /* Print information about versions. */
2687 if (memcmp (envline, "VERBOSE", 7) == 0)
2689 state->version_info = envline[8] != '\0';
2690 break;
2693 /* List of objects to be preloaded. */
2694 if (memcmp (envline, "PRELOAD", 7) == 0)
2696 state->preloadlist = &envline[8];
2697 break;
2700 /* Which shared object shall be profiled. */
2701 if (memcmp (envline, "PROFILE", 7) == 0 && envline[8] != '\0')
2702 GLRO(dl_profile) = &envline[8];
2703 break;
2705 case 8:
2706 /* Do we bind early? */
2707 if (memcmp (envline, "BIND_NOW", 8) == 0)
2709 GLRO(dl_lazy) = envline[9] == '\0';
2710 break;
2712 if (memcmp (envline, "BIND_NOT", 8) == 0)
2713 GLRO(dl_bind_not) = envline[9] != '\0';
2714 break;
2716 case 9:
2717 /* Test whether we want to see the content of the auxiliary
2718 array passed up from the kernel. */
2719 if (!__libc_enable_secure
2720 && memcmp (envline, "SHOW_AUXV", 9) == 0)
2721 _dl_show_auxv ();
2722 break;
2724 #if !HAVE_TUNABLES
2725 case 10:
2726 /* Mask for the important hardware capabilities. */
2727 if (!__libc_enable_secure
2728 && memcmp (envline, "HWCAP_MASK", 10) == 0)
2729 GLRO(dl_hwcap_mask) = _dl_strtoul (&envline[11], NULL);
2730 break;
2731 #endif
2733 case 11:
2734 /* Path where the binary is found. */
2735 if (!__libc_enable_secure
2736 && memcmp (envline, "ORIGIN_PATH", 11) == 0)
2737 GLRO(dl_origin_path) = &envline[12];
2738 break;
2740 case 12:
2741 /* The library search path. */
2742 if (!__libc_enable_secure
2743 && memcmp (envline, "LIBRARY_PATH", 12) == 0)
2745 state->library_path = &envline[13];
2746 state->library_path_source = "LD_LIBRARY_PATH";
2747 break;
2750 /* Where to place the profiling data file. */
2751 if (memcmp (envline, "DEBUG_OUTPUT", 12) == 0)
2753 debug_output = &envline[13];
2754 break;
2757 if (!__libc_enable_secure
2758 && memcmp (envline, "DYNAMIC_WEAK", 12) == 0)
2759 GLRO(dl_dynamic_weak) = 1;
2760 break;
2762 case 13:
2763 /* We might have some extra environment variable with length 13
2764 to handle. */
2765 #ifdef EXTRA_LD_ENVVARS_13
2766 EXTRA_LD_ENVVARS_13
2767 #endif
2768 if (!__libc_enable_secure
2769 && memcmp (envline, "USE_LOAD_BIAS", 13) == 0)
2771 GLRO(dl_use_load_bias) = envline[14] == '1' ? -1 : 0;
2772 break;
2774 break;
2776 case 14:
2777 /* Where to place the profiling data file. */
2778 if (!__libc_enable_secure
2779 && memcmp (envline, "PROFILE_OUTPUT", 14) == 0
2780 && envline[15] != '\0')
2781 GLRO(dl_profile_output) = &envline[15];
2782 break;
2784 case 16:
2785 /* The mode of the dynamic linker can be set. */
2786 if (memcmp (envline, "TRACE_PRELINKING", 16) == 0)
2788 state->mode = rtld_mode_trace;
2789 GLRO(dl_verbose) = 1;
2790 GLRO(dl_debug_mask) |= DL_DEBUG_PRELINK;
2791 GLRO(dl_trace_prelink) = &envline[17];
2793 break;
2795 case 20:
2796 /* The mode of the dynamic linker can be set. */
2797 if (memcmp (envline, "TRACE_LOADED_OBJECTS", 20) == 0)
2798 state->mode = rtld_mode_trace;
2799 break;
2801 /* We might have some extra environment variable to handle. This
2802 is tricky due to the pre-processing of the length of the name
2803 in the switch statement here. The code here assumes that added
2804 environment variables have a different length. */
2805 #ifdef EXTRA_LD_ENVVARS
2806 EXTRA_LD_ENVVARS
2807 #endif
2811 /* Extra security for SUID binaries. Remove all dangerous environment
2812 variables. */
2813 if (__builtin_expect (__libc_enable_secure, 0))
2815 static const char unsecure_envvars[] =
2816 #ifdef EXTRA_UNSECURE_ENVVARS
2817 EXTRA_UNSECURE_ENVVARS
2818 #endif
2819 UNSECURE_ENVVARS;
2820 const char *nextp;
2822 nextp = unsecure_envvars;
2825 unsetenv (nextp);
2826 /* We could use rawmemchr but this need not be fast. */
2827 nextp = (char *) (strchr) (nextp, '\0') + 1;
2829 while (*nextp != '\0');
2831 if (__access ("/etc/suid-debug", F_OK) != 0)
2833 #if !HAVE_TUNABLES
2834 unsetenv ("MALLOC_CHECK_");
2835 #endif
2836 GLRO(dl_debug_mask) = 0;
2839 if (state->mode != rtld_mode_normal)
2840 _exit (5);
2842 /* If we have to run the dynamic linker in debugging mode and the
2843 LD_DEBUG_OUTPUT environment variable is given, we write the debug
2844 messages to this file. */
2845 else if (state->any_debug && debug_output != NULL)
2847 const int flags = O_WRONLY | O_APPEND | O_CREAT | O_NOFOLLOW;
2848 size_t name_len = strlen (debug_output);
2849 char buf[name_len + 12];
2850 char *startp;
2852 buf[name_len + 11] = '\0';
2853 startp = _itoa (__getpid (), &buf[name_len + 11], 10, 0);
2854 *--startp = '.';
2855 startp = memcpy (startp - name_len, debug_output, name_len);
2857 GLRO(dl_debug_fd) = __open64_nocancel (startp, flags, DEFFILEMODE);
2858 if (GLRO(dl_debug_fd) == -1)
2859 /* We use standard output if opening the file failed. */
2860 GLRO(dl_debug_fd) = STDOUT_FILENO;
2864 #if HP_TIMING_INLINE
2865 static void
2866 print_statistics_item (const char *title, hp_timing_t time,
2867 hp_timing_t total)
2869 char cycles[HP_TIMING_PRINT_SIZE];
2870 HP_TIMING_PRINT (cycles, sizeof (cycles), time);
2872 char relative[3 * sizeof (hp_timing_t) + 2];
2873 char *cp = _itoa ((1000ULL * time) / total, relative + sizeof (relative),
2874 10, 0);
2875 /* Sets the decimal point. */
2876 char *wp = relative;
2877 switch (relative + sizeof (relative) - cp)
2879 case 3:
2880 *wp++ = *cp++;
2881 /* Fall through. */
2882 case 2:
2883 *wp++ = *cp++;
2884 /* Fall through. */
2885 case 1:
2886 *wp++ = '.';
2887 *wp++ = *cp++;
2889 *wp = '\0';
2890 _dl_debug_printf ("%s: %s cycles (%s%%)\n", title, cycles, relative);
2892 #endif
2894 /* Print the various times we collected. */
2895 static void
2896 __attribute ((noinline))
2897 print_statistics (const hp_timing_t *rtld_total_timep)
2899 #if HP_TIMING_INLINE
2901 char cycles[HP_TIMING_PRINT_SIZE];
2902 HP_TIMING_PRINT (cycles, sizeof (cycles), *rtld_total_timep);
2903 _dl_debug_printf ("\nruntime linker statistics:\n"
2904 " total startup time in dynamic loader: %s cycles\n",
2905 cycles);
2906 print_statistics_item (" time needed for relocation",
2907 relocate_time, *rtld_total_timep);
2909 #endif
2911 unsigned long int num_relative_relocations = 0;
2912 for (Lmid_t ns = 0; ns < GL(dl_nns); ++ns)
2914 if (GL(dl_ns)[ns]._ns_loaded == NULL)
2915 continue;
2917 struct r_scope_elem *scope = &GL(dl_ns)[ns]._ns_loaded->l_searchlist;
2919 for (unsigned int i = 0; i < scope->r_nlist; i++)
2921 struct link_map *l = scope->r_list [i];
2923 if (l->l_addr != 0 && l->l_info[VERSYMIDX (DT_RELCOUNT)])
2924 num_relative_relocations
2925 += l->l_info[VERSYMIDX (DT_RELCOUNT)]->d_un.d_val;
2926 #ifndef ELF_MACHINE_REL_RELATIVE
2927 /* Relative relocations are processed on these architectures if
2928 library is loaded to different address than p_vaddr or
2929 if not prelinked. */
2930 if ((l->l_addr != 0 || !l->l_info[VALIDX(DT_GNU_PRELINKED)])
2931 && l->l_info[VERSYMIDX (DT_RELACOUNT)])
2932 #else
2933 /* On e.g. IA-64 or Alpha, relative relocations are processed
2934 only if library is loaded to different address than p_vaddr. */
2935 if (l->l_addr != 0 && l->l_info[VERSYMIDX (DT_RELACOUNT)])
2936 #endif
2937 num_relative_relocations
2938 += l->l_info[VERSYMIDX (DT_RELACOUNT)]->d_un.d_val;
2942 _dl_debug_printf (" number of relocations: %lu\n"
2943 " number of relocations from cache: %lu\n"
2944 " number of relative relocations: %lu\n",
2945 GL(dl_num_relocations),
2946 GL(dl_num_cache_relocations),
2947 num_relative_relocations);
2949 #if HP_TIMING_INLINE
2950 print_statistics_item (" time needed to load objects",
2951 load_time, *rtld_total_timep);
2952 #endif