Set constructor/destructor priority to 1000
[platform/upstream/glibc.git] / elf / rtld.c
1 /* Run time dynamic linker.
2    Copyright (C) 1995-2012 Free Software Foundation, Inc.
3    This file is part of the GNU C Library.
4
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.
9
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.
14
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    <http://www.gnu.org/licenses/>.  */
18
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 <bits/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 <tls.h>
42 #include <stap-probe.h>
43 #include <stackinfo.h>
44
45 #include <assert.h>
46
47 /* Avoid PLT use for our local calls at startup.  */
48 extern __typeof (__mempcpy) __mempcpy attribute_hidden;
49
50 /* GCC has mental blocks about _exit.  */
51 extern __typeof (_exit) exit_internal asm ("_exit") attribute_hidden;
52 #define _exit exit_internal
53
54 /* Helper function to handle errors while resolving symbols.  */
55 static void print_unresolved (int errcode, const char *objname,
56                               const char *errsting);
57
58 /* Helper function to handle errors when a version is missing.  */
59 static void print_missing_version (int errcode, const char *objname,
60                                    const char *errsting);
61
62 /* Print the various times we collected.  */
63 static void print_statistics (hp_timing_t *total_timep);
64
65 /* Add audit objects.  */
66 static void process_dl_audit (char *str);
67
68 /* This is a list of all the modes the dynamic loader can be in.  */
69 enum mode { normal, list, verify, trace };
70
71 /* Process all environments variables the dynamic linker must recognize.
72    Since all of them start with `LD_' we are a bit smarter while finding
73    all the entries.  */
74 static void process_envvars (enum mode *modep);
75
76 #ifdef DL_ARGV_NOT_RELRO
77 int _dl_argc attribute_hidden;
78 char **_dl_argv = NULL;
79 /* Nonzero if we were run directly.  */
80 unsigned int _dl_skip_args attribute_hidden;
81 #else
82 int _dl_argc attribute_relro attribute_hidden;
83 char **_dl_argv attribute_relro = NULL;
84 unsigned int _dl_skip_args attribute_relro attribute_hidden;
85 #endif
86 INTDEF(_dl_argv)
87
88 #ifndef THREAD_SET_STACK_GUARD
89 /* Only exported for architectures that don't store the stack guard canary
90    in thread local area.  */
91 uintptr_t __stack_chk_guard attribute_relro;
92 #endif
93
94 /* Only exported for architectures that don't store the pointer guard
95    value in thread local area.  */
96 uintptr_t __pointer_chk_guard_local
97      attribute_relro attribute_hidden __attribute__ ((nocommon));
98 #ifndef THREAD_SET_POINTER_GUARD
99 strong_alias (__pointer_chk_guard_local, __pointer_chk_guard)
100 #endif
101
102
103 /* List of auditing DSOs.  */
104 static struct audit_list
105 {
106   const char *name;
107   struct audit_list *next;
108 } *audit_list;
109
110 #ifndef HAVE_INLINED_SYSCALLS
111 /* Set nonzero during loading and initialization of executable and
112    libraries, cleared before the executable's entry point runs.  This
113    must not be initialized to nonzero, because the unused dynamic
114    linker loaded in for libc.so's "ld.so.1" dep will provide the
115    definition seen by libc.so's initializer; that value must be zero,
116    and will be since that dynamic linker's _dl_start and dl_main will
117    never be called.  */
118 int _dl_starting_up = 0;
119 INTVARDEF(_dl_starting_up)
120 #endif
121
122 /* This is the structure which defines all variables global to ld.so
123    (except those which cannot be added for some reason).  */
124 struct rtld_global _rtld_global =
125   {
126     /* Generally the default presumption without further information is an
127      * executable stack but this is not true for all platforms.  */
128     ._dl_stack_flags = DEFAULT_STACK_PERMS,
129 #ifdef _LIBC_REENTRANT
130     ._dl_load_lock = _RTLD_LOCK_RECURSIVE_INITIALIZER,
131     ._dl_load_write_lock = _RTLD_LOCK_RECURSIVE_INITIALIZER,
132 #endif
133     ._dl_nns = 1,
134     ._dl_ns =
135     {
136 #ifdef _LIBC_REENTRANT
137       [LM_ID_BASE] = { ._ns_unique_sym_table
138                        = { .lock = _RTLD_LOCK_RECURSIVE_INITIALIZER } }
139 #endif
140     }
141   };
142 /* If we would use strong_alias here the compiler would see a
143    non-hidden definition.  This would undo the effect of the previous
144    declaration.  So spell out was strong_alias does plus add the
145    visibility attribute.  */
146 extern struct rtld_global _rtld_local
147     __attribute__ ((alias ("_rtld_global"), visibility ("hidden")));
148
149
150 /* This variable is similar to _rtld_local, but all values are
151    read-only after relocation.  */
152 struct rtld_global_ro _rtld_global_ro attribute_relro =
153   {
154     /* Get architecture specific initializer.  */
155 #include <dl-procinfo.c>
156 #ifdef NEED_DL_SYSINFO
157     ._dl_sysinfo = DL_SYSINFO_DEFAULT,
158 #endif
159     ._dl_debug_fd = STDERR_FILENO,
160     ._dl_use_load_bias = -2,
161     ._dl_correct_cache_id = _DL_CACHE_DEFAULT_ID,
162     ._dl_hwcap_mask = HWCAP_IMPORTANT,
163     ._dl_lazy = 1,
164     ._dl_fpu_control = _FPU_DEFAULT,
165     ._dl_pointer_guard = 1,
166     ._dl_pagesize = EXEC_PAGESIZE,
167     ._dl_inhibit_cache = 0,
168
169     /* Function pointers.  */
170     ._dl_debug_printf = _dl_debug_printf,
171     ._dl_catch_error = _dl_catch_error,
172     ._dl_signal_error = _dl_signal_error,
173     ._dl_mcount = _dl_mcount_internal,
174     ._dl_lookup_symbol_x = _dl_lookup_symbol_x,
175     ._dl_check_caller = _dl_check_caller,
176     ._dl_open = _dl_open,
177     ._dl_close = _dl_close,
178     ._dl_tls_get_addr_soft = _dl_tls_get_addr_soft,
179 #ifdef HAVE_DL_DISCOVER_OSVERSION
180     ._dl_discover_osversion = _dl_discover_osversion
181 #endif
182   };
183 /* If we would use strong_alias here the compiler would see a
184    non-hidden definition.  This would undo the effect of the previous
185    declaration.  So spell out was strong_alias does plus add the
186    visibility attribute.  */
187 extern struct rtld_global_ro _rtld_local_ro
188     __attribute__ ((alias ("_rtld_global_ro"), visibility ("hidden")));
189
190
191 static void dl_main (const ElfW(Phdr) *phdr, ElfW(Word) phnum,
192                      ElfW(Addr) *user_entry, ElfW(auxv_t) *auxv);
193
194 /* These two variables cannot be moved into .data.rel.ro.  */
195 static struct libname_list _dl_rtld_libname;
196 static struct libname_list _dl_rtld_libname2;
197
198 /* We expect less than a second for relocation.  */
199 #ifdef HP_SMALL_TIMING_AVAIL
200 # undef HP_TIMING_AVAIL
201 # define HP_TIMING_AVAIL HP_SMALL_TIMING_AVAIL
202 #endif
203
204 /* Variable for statistics.  */
205 #ifndef HP_TIMING_NONAVAIL
206 static hp_timing_t relocate_time;
207 static hp_timing_t load_time attribute_relro;
208 static hp_timing_t start_time attribute_relro;
209 #endif
210
211 /* Additional definitions needed by TLS initialization.  */
212 #ifdef TLS_INIT_HELPER
213 TLS_INIT_HELPER
214 #endif
215
216 /* Helper function for syscall implementation.  */
217 #ifdef DL_SYSINFO_IMPLEMENTATION
218 DL_SYSINFO_IMPLEMENTATION
219 #endif
220
221 /* Before ld.so is relocated we must not access variables which need
222    relocations.  This means variables which are exported.  Variables
223    declared as static are fine.  If we can mark a variable hidden this
224    is fine, too.  The latter is important here.  We can avoid setting
225    up a temporary link map for ld.so if we can mark _rtld_global as
226    hidden.  */
227 #ifdef PI_STATIC_AND_HIDDEN
228 # define DONT_USE_BOOTSTRAP_MAP 1
229 #endif
230
231 #ifdef DONT_USE_BOOTSTRAP_MAP
232 static ElfW(Addr) _dl_start_final (void *arg);
233 #else
234 struct dl_start_final_info
235 {
236   struct link_map l;
237 #if !defined HP_TIMING_NONAVAIL && HP_TIMING_INLINE
238   hp_timing_t start_time;
239 #endif
240 };
241 static ElfW(Addr) _dl_start_final (void *arg,
242                                    struct dl_start_final_info *info);
243 #endif
244
245 /* These defined magically in the linker script.  */
246 extern char _begin[] attribute_hidden;
247 extern char _etext[] attribute_hidden;
248 extern char _end[] attribute_hidden;
249
250
251 #ifdef RTLD_START
252 RTLD_START
253 #else
254 # error "sysdeps/MACHINE/dl-machine.h fails to define RTLD_START"
255 #endif
256
257 /* This is the second half of _dl_start (below).  It can be inlined safely
258    under DONT_USE_BOOTSTRAP_MAP, where it is careful not to make any GOT
259    references.  When the tools don't permit us to avoid using a GOT entry
260    for _dl_rtld_global (no attribute_hidden support), we must make sure
261    this function is not inlined (see below).  */
262
263 #ifdef DONT_USE_BOOTSTRAP_MAP
264 static inline ElfW(Addr) __attribute__ ((always_inline))
265 _dl_start_final (void *arg)
266 #else
267 static ElfW(Addr) __attribute__ ((noinline))
268 _dl_start_final (void *arg, struct dl_start_final_info *info)
269 #endif
270 {
271   ElfW(Addr) start_addr;
272
273   if (HP_TIMING_AVAIL)
274     {
275       /* If it hasn't happen yet record the startup time.  */
276       if (! HP_TIMING_INLINE)
277         HP_TIMING_NOW (start_time);
278 #if !defined DONT_USE_BOOTSTRAP_MAP && !defined HP_TIMING_NONAVAIL
279       else
280         start_time = info->start_time;
281 #endif
282
283       /* Initialize the timing functions.  */
284       HP_TIMING_DIFF_INIT ();
285     }
286
287   /* Transfer data about ourselves to the permanent link_map structure.  */
288 #ifndef DONT_USE_BOOTSTRAP_MAP
289   GL(dl_rtld_map).l_addr = info->l.l_addr;
290   GL(dl_rtld_map).l_ld = info->l.l_ld;
291   memcpy (GL(dl_rtld_map).l_info, info->l.l_info,
292           sizeof GL(dl_rtld_map).l_info);
293   GL(dl_rtld_map).l_mach = info->l.l_mach;
294   GL(dl_rtld_map).l_relocated = 1;
295 #endif
296   _dl_setup_hash (&GL(dl_rtld_map));
297   GL(dl_rtld_map).l_real = &GL(dl_rtld_map);
298   GL(dl_rtld_map).l_map_start = (ElfW(Addr)) _begin;
299   GL(dl_rtld_map).l_map_end = (ElfW(Addr)) _end;
300   GL(dl_rtld_map).l_text_end = (ElfW(Addr)) _etext;
301   /* Copy the TLS related data if necessary.  */
302 #ifndef DONT_USE_BOOTSTRAP_MAP
303 # if USE___THREAD
304   assert (info->l.l_tls_modid != 0);
305   GL(dl_rtld_map).l_tls_blocksize = info->l.l_tls_blocksize;
306   GL(dl_rtld_map).l_tls_align = info->l.l_tls_align;
307   GL(dl_rtld_map).l_tls_firstbyte_offset = info->l.l_tls_firstbyte_offset;
308   GL(dl_rtld_map).l_tls_initimage_size = info->l.l_tls_initimage_size;
309   GL(dl_rtld_map).l_tls_initimage = info->l.l_tls_initimage;
310   GL(dl_rtld_map).l_tls_offset = info->l.l_tls_offset;
311   GL(dl_rtld_map).l_tls_modid = 1;
312 # else
313 #  if NO_TLS_OFFSET != 0
314   GL(dl_rtld_map).l_tls_offset = NO_TLS_OFFSET;
315 #  endif
316 # endif
317
318 #endif
319
320 #if HP_TIMING_AVAIL
321   HP_TIMING_NOW (GL(dl_cpuclock_offset));
322 #endif
323
324   /* Initialize the stack end variable.  */
325   __libc_stack_end = __builtin_frame_address (0);
326
327   /* Call the OS-dependent function to set up life so we can do things like
328      file access.  It will call `dl_main' (below) to do all the real work
329      of the dynamic linker, and then unwind our frame and run the user
330      entry point on the same stack we entered on.  */
331   start_addr = _dl_sysdep_start (arg, &dl_main);
332
333 #ifndef HP_TIMING_NONAVAIL
334   hp_timing_t rtld_total_time;
335   if (HP_TIMING_AVAIL)
336     {
337       hp_timing_t end_time;
338
339       /* Get the current time.  */
340       HP_TIMING_NOW (end_time);
341
342       /* Compute the difference.  */
343       HP_TIMING_DIFF (rtld_total_time, start_time, end_time);
344     }
345 #endif
346
347   if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_STATISTICS, 0))
348     {
349 #ifndef HP_TIMING_NONAVAIL
350       print_statistics (&rtld_total_time);
351 #else
352       print_statistics (NULL);
353 #endif
354     }
355
356   return start_addr;
357 }
358
359 static ElfW(Addr) __attribute_used__ internal_function
360 _dl_start (void *arg)
361 {
362 #ifdef DONT_USE_BOOTSTRAP_MAP
363 # define bootstrap_map GL(dl_rtld_map)
364 #else
365   struct dl_start_final_info info;
366 # define bootstrap_map info.l
367 #endif
368
369   /* This #define produces dynamic linking inline functions for
370      bootstrap relocation instead of general-purpose relocation.
371      Since ld.so must not have any undefined symbols the result
372      is trivial: always the map of ld.so itself.  */
373 #define RTLD_BOOTSTRAP
374 #define RESOLVE_MAP(sym, version, flags) (&bootstrap_map)
375 #include "dynamic-link.h"
376
377   if (HP_TIMING_INLINE && HP_TIMING_AVAIL)
378 #ifdef DONT_USE_BOOTSTRAP_MAP
379     HP_TIMING_NOW (start_time);
380 #else
381     HP_TIMING_NOW (info.start_time);
382 #endif
383
384   /* Partly clean the `bootstrap_map' structure up.  Don't use
385      `memset' since it might not be built in or inlined and we cannot
386      make function calls at this point.  Use '__builtin_memset' if we
387      know it is available.  We do not have to clear the memory if we
388      do not have to use the temporary bootstrap_map.  Global variables
389      are initialized to zero by default.  */
390 #ifndef DONT_USE_BOOTSTRAP_MAP
391 # ifdef HAVE_BUILTIN_MEMSET
392   __builtin_memset (bootstrap_map.l_info, '\0', sizeof (bootstrap_map.l_info));
393 # else
394   for (size_t cnt = 0;
395        cnt < sizeof (bootstrap_map.l_info) / sizeof (bootstrap_map.l_info[0]);
396        ++cnt)
397     bootstrap_map.l_info[cnt] = 0;
398 # endif
399 # if USE___THREAD
400   bootstrap_map.l_tls_modid = 0;
401 # endif
402 #endif
403
404   /* Figure out the run-time load address of the dynamic linker itself.  */
405   bootstrap_map.l_addr = elf_machine_load_address ();
406
407   /* Read our own dynamic section and fill in the info array.  */
408   bootstrap_map.l_ld = (void *) bootstrap_map.l_addr + elf_machine_dynamic ();
409   elf_get_dynamic_info (&bootstrap_map, NULL);
410
411 #if NO_TLS_OFFSET != 0
412   bootstrap_map.l_tls_offset = NO_TLS_OFFSET;
413 #endif
414
415   /* Get the dynamic linker's own program header.  First we need the ELF
416      file header.  The `_begin' symbol created by the linker script points
417      to it.  When we have something like GOTOFF relocs, we can use a plain
418      reference to find the runtime address.  Without that, we have to rely
419      on the `l_addr' value, which is not the value we want when prelinked.  */
420 #if USE___THREAD
421   dtv_t initdtv[3];
422   ElfW(Ehdr) *ehdr
423 # ifdef DONT_USE_BOOTSTRAP_MAP
424     = (ElfW(Ehdr) *) &_begin;
425 # else
426 #  error This will not work with prelink.
427     = (ElfW(Ehdr) *) bootstrap_map.l_addr;
428 # endif
429   ElfW(Phdr) *phdr = (ElfW(Phdr) *) ((void *) ehdr + ehdr->e_phoff);
430   size_t cnt = ehdr->e_phnum;   /* PT_TLS is usually the last phdr.  */
431   while (cnt-- > 0)
432     if (phdr[cnt].p_type == PT_TLS)
433       {
434         void *tlsblock;
435         size_t max_align = MAX (TLS_INIT_TCB_ALIGN, phdr[cnt].p_align);
436         char *p;
437
438         bootstrap_map.l_tls_blocksize = phdr[cnt].p_memsz;
439         bootstrap_map.l_tls_align = phdr[cnt].p_align;
440         if (phdr[cnt].p_align == 0)
441           bootstrap_map.l_tls_firstbyte_offset = 0;
442         else
443           bootstrap_map.l_tls_firstbyte_offset = (phdr[cnt].p_vaddr
444                                                   & (phdr[cnt].p_align - 1));
445         assert (bootstrap_map.l_tls_blocksize != 0);
446         bootstrap_map.l_tls_initimage_size = phdr[cnt].p_filesz;
447         bootstrap_map.l_tls_initimage = (void *) (bootstrap_map.l_addr
448                                                   + phdr[cnt].p_vaddr);
449
450         /* We can now allocate the initial TLS block.  This can happen
451            on the stack.  We'll get the final memory later when we
452            know all about the various objects loaded at startup
453            time.  */
454 # if TLS_TCB_AT_TP
455         tlsblock = alloca (roundup (bootstrap_map.l_tls_blocksize,
456                                     TLS_INIT_TCB_ALIGN)
457                            + TLS_INIT_TCB_SIZE
458                            + max_align);
459 # elif TLS_DTV_AT_TP
460         tlsblock = alloca (roundup (TLS_INIT_TCB_SIZE,
461                                     bootstrap_map.l_tls_align)
462                            + bootstrap_map.l_tls_blocksize
463                            + max_align);
464 # else
465         /* In case a model with a different layout for the TCB and DTV
466            is defined add another #elif here and in the following #ifs.  */
467 #  error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined"
468 # endif
469         /* Align the TLS block.  */
470         tlsblock = (void *) (((uintptr_t) tlsblock + max_align - 1)
471                              & ~(max_align - 1));
472
473         /* Initialize the dtv.  [0] is the length, [1] the generation
474            counter.  */
475         initdtv[0].counter = 1;
476         initdtv[1].counter = 0;
477
478         /* Initialize the TLS block.  */
479 # if TLS_TCB_AT_TP
480         initdtv[2].pointer = tlsblock;
481 # elif TLS_DTV_AT_TP
482         bootstrap_map.l_tls_offset = roundup (TLS_INIT_TCB_SIZE,
483                                               bootstrap_map.l_tls_align);
484         initdtv[2].pointer = (char *) tlsblock + bootstrap_map.l_tls_offset;
485 # else
486 #  error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined"
487 # endif
488         p = __mempcpy (initdtv[2].pointer, bootstrap_map.l_tls_initimage,
489                        bootstrap_map.l_tls_initimage_size);
490 # ifdef HAVE_BUILTIN_MEMSET
491         __builtin_memset (p, '\0', (bootstrap_map.l_tls_blocksize
492                                     - bootstrap_map.l_tls_initimage_size));
493 # else
494         {
495           size_t remaining = (bootstrap_map.l_tls_blocksize
496                               - bootstrap_map.l_tls_initimage_size);
497           while (remaining-- > 0)
498             *p++ = '\0';
499         }
500 # endif
501
502         /* Install the pointer to the dtv.  */
503
504         /* Initialize the thread pointer.  */
505 # if TLS_TCB_AT_TP
506         bootstrap_map.l_tls_offset
507           = roundup (bootstrap_map.l_tls_blocksize, TLS_INIT_TCB_ALIGN);
508
509         INSTALL_DTV ((char *) tlsblock + bootstrap_map.l_tls_offset,
510                      initdtv);
511
512         const char *lossage = TLS_INIT_TP ((char *) tlsblock
513                                            + bootstrap_map.l_tls_offset, 0);
514 # elif TLS_DTV_AT_TP
515         INSTALL_DTV (tlsblock, initdtv);
516         const char *lossage = TLS_INIT_TP (tlsblock, 0);
517 # else
518 #  error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined"
519 # endif
520         if (__builtin_expect (lossage != NULL, 0))
521           _dl_fatal_printf ("cannot set up thread-local storage: %s\n",
522                             lossage);
523
524         /* So far this is module number one.  */
525         bootstrap_map.l_tls_modid = 1;
526
527         /* There can only be one PT_TLS entry.  */
528         break;
529       }
530 #endif  /* USE___THREAD */
531
532 #ifdef ELF_MACHINE_BEFORE_RTLD_RELOC
533   ELF_MACHINE_BEFORE_RTLD_RELOC (bootstrap_map.l_info);
534 #endif
535
536   if (bootstrap_map.l_addr || ! bootstrap_map.l_info[VALIDX(DT_GNU_PRELINKED)])
537     {
538       /* Relocate ourselves so we can do normal function calls and
539          data access using the global offset table.  */
540
541       ELF_DYNAMIC_RELOCATE (&bootstrap_map, 0, 0, 0);
542     }
543   bootstrap_map.l_relocated = 1;
544
545   /* Please note that we don't allow profiling of this object and
546      therefore need not test whether we have to allocate the array
547      for the relocation results (as done in dl-reloc.c).  */
548
549   /* Now life is sane; we can call functions and access global data.
550      Set up to use the operating system facilities, and find out from
551      the operating system's program loader where to find the program
552      header table in core.  Put the rest of _dl_start into a separate
553      function, that way the compiler cannot put accesses to the GOT
554      before ELF_DYNAMIC_RELOCATE.  */
555   {
556 #ifdef DONT_USE_BOOTSTRAP_MAP
557     ElfW(Addr) entry = _dl_start_final (arg);
558 #else
559     ElfW(Addr) entry = _dl_start_final (arg, &info);
560 #endif
561
562 #ifndef ELF_MACHINE_START_ADDRESS
563 # define ELF_MACHINE_START_ADDRESS(map, start) (start)
564 #endif
565
566     return ELF_MACHINE_START_ADDRESS (GL(dl_ns)[LM_ID_BASE]._ns_loaded, entry);
567   }
568 }
569
570
571
572 /* Now life is peachy; we can do all normal operations.
573    On to the real work.  */
574
575 /* Some helper functions.  */
576
577 /* Arguments to relocate_doit.  */
578 struct relocate_args
579 {
580   struct link_map *l;
581   int reloc_mode;
582 };
583
584 struct map_args
585 {
586   /* Argument to map_doit.  */
587   char *str;
588   struct link_map *loader;
589   int mode;
590   /* Return value of map_doit.  */
591   struct link_map *map;
592 };
593
594 struct dlmopen_args
595 {
596   const char *fname;
597   struct link_map *map;
598 };
599
600 struct lookup_args
601 {
602   const char *name;
603   struct link_map *map;
604   void *result;
605 };
606
607 /* Arguments to version_check_doit.  */
608 struct version_check_args
609 {
610   int doexit;
611   int dotrace;
612 };
613
614 static void
615 relocate_doit (void *a)
616 {
617   struct relocate_args *args = (struct relocate_args *) a;
618
619   _dl_relocate_object (args->l, args->l->l_scope, args->reloc_mode, 0);
620 }
621
622 static void
623 map_doit (void *a)
624 {
625   struct map_args *args = (struct map_args *) a;
626   args->map = _dl_map_object (args->loader, args->str, lt_library, 0,
627                               args->mode, LM_ID_BASE);
628 }
629
630 static void
631 dlmopen_doit (void *a)
632 {
633   struct dlmopen_args *args = (struct dlmopen_args *) a;
634   args->map = _dl_open (args->fname,
635                         (RTLD_LAZY | __RTLD_DLOPEN | __RTLD_AUDIT
636                          | __RTLD_SECURE),
637                         dl_main, LM_ID_NEWLM, _dl_argc, INTUSE(_dl_argv),
638                         __environ);
639 }
640
641 static void
642 lookup_doit (void *a)
643 {
644   struct lookup_args *args = (struct lookup_args *) a;
645   const ElfW(Sym) *ref = NULL;
646   args->result = NULL;
647   lookup_t l = _dl_lookup_symbol_x (args->name, args->map, &ref,
648                                     args->map->l_local_scope, NULL, 0,
649                                     DL_LOOKUP_RETURN_NEWEST, NULL);
650   if (ref != NULL)
651     args->result = DL_SYMBOL_ADDRESS (l, ref);
652 }
653
654 static void
655 version_check_doit (void *a)
656 {
657   struct version_check_args *args = (struct version_check_args *) a;
658   if (_dl_check_all_versions (GL(dl_ns)[LM_ID_BASE]._ns_loaded, 1,
659                               args->dotrace) && args->doexit)
660     /* We cannot start the application.  Abort now.  */
661     _exit (1);
662 }
663
664
665 static inline struct link_map *
666 find_needed (const char *name)
667 {
668   struct r_scope_elem *scope = &GL(dl_ns)[LM_ID_BASE]._ns_loaded->l_searchlist;
669   unsigned int n = scope->r_nlist;
670
671   while (n-- > 0)
672     if (_dl_name_match_p (name, scope->r_list[n]))
673       return scope->r_list[n];
674
675   /* Should never happen.  */
676   return NULL;
677 }
678
679 static int
680 match_version (const char *string, struct link_map *map)
681 {
682   const char *strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]);
683   ElfW(Verdef) *def;
684
685 #define VERDEFTAG (DT_NUM + DT_THISPROCNUM + DT_VERSIONTAGIDX (DT_VERDEF))
686   if (map->l_info[VERDEFTAG] == NULL)
687     /* The file has no symbol versioning.  */
688     return 0;
689
690   def = (ElfW(Verdef) *) ((char *) map->l_addr
691                           + map->l_info[VERDEFTAG]->d_un.d_ptr);
692   while (1)
693     {
694       ElfW(Verdaux) *aux = (ElfW(Verdaux) *) ((char *) def + def->vd_aux);
695
696       /* Compare the version strings.  */
697       if (strcmp (string, strtab + aux->vda_name) == 0)
698         /* Bingo!  */
699         return 1;
700
701       /* If no more definitions we failed to find what we want.  */
702       if (def->vd_next == 0)
703         break;
704
705       /* Next definition.  */
706       def = (ElfW(Verdef) *) ((char *) def + def->vd_next);
707     }
708
709   return 0;
710 }
711
712 static bool tls_init_tp_called;
713
714 static void *
715 init_tls (void)
716 {
717   /* Number of elements in the static TLS block.  */
718   GL(dl_tls_static_nelem) = GL(dl_tls_max_dtv_idx);
719
720   /* Do not do this twice.  The audit interface might have required
721      the DTV interfaces to be set up early.  */
722   if (GL(dl_initial_dtv) != NULL)
723     return NULL;
724
725   /* Allocate the array which contains the information about the
726      dtv slots.  We allocate a few entries more than needed to
727      avoid the need for reallocation.  */
728   size_t nelem = GL(dl_tls_max_dtv_idx) + 1 + TLS_SLOTINFO_SURPLUS;
729
730   /* Allocate.  */
731   GL(dl_tls_dtv_slotinfo_list) = (struct dtv_slotinfo_list *)
732     calloc (sizeof (struct dtv_slotinfo_list)
733             + nelem * sizeof (struct dtv_slotinfo), 1);
734   /* No need to check the return value.  If memory allocation failed
735      the program would have been terminated.  */
736
737   struct dtv_slotinfo *slotinfo = GL(dl_tls_dtv_slotinfo_list)->slotinfo;
738   GL(dl_tls_dtv_slotinfo_list)->len = nelem;
739   GL(dl_tls_dtv_slotinfo_list)->next = NULL;
740
741   /* Fill in the information from the loaded modules.  No namespace
742      but the base one can be filled at this time.  */
743   assert (GL(dl_ns)[LM_ID_BASE + 1]._ns_loaded == NULL);
744   int i = 0;
745   for (struct link_map *l = GL(dl_ns)[LM_ID_BASE]._ns_loaded; l != NULL;
746        l = l->l_next)
747     if (l->l_tls_blocksize != 0)
748       {
749         /* This is a module with TLS data.  Store the map reference.
750            The generation counter is zero.  */
751         slotinfo[i].map = l;
752         /* slotinfo[i].gen = 0; */
753         ++i;
754       }
755   assert (i == GL(dl_tls_max_dtv_idx));
756
757   /* Compute the TLS offsets for the various blocks.  */
758   _dl_determine_tlsoffset ();
759
760   /* Construct the static TLS block and the dtv for the initial
761      thread.  For some platforms this will include allocating memory
762      for the thread descriptor.  The memory for the TLS block will
763      never be freed.  It should be allocated accordingly.  The dtv
764      array can be changed if dynamic loading requires it.  */
765   void *tcbp = _dl_allocate_tls_storage ();
766   if (tcbp == NULL)
767     _dl_fatal_printf ("\
768 cannot allocate TLS data structures for initial thread");
769
770   /* Store for detection of the special case by __tls_get_addr
771      so it knows not to pass this dtv to the normal realloc.  */
772   GL(dl_initial_dtv) = GET_DTV (tcbp);
773
774   /* And finally install it for the main thread.  If ld.so itself uses
775      TLS we know the thread pointer was initialized earlier.  */
776   const char *lossage
777 #ifdef USE___THREAD
778     = TLS_INIT_TP (tcbp, USE___THREAD);
779 #else
780     = TLS_INIT_TP (tcbp, 0);
781 #endif
782   if (__builtin_expect (lossage != NULL, 0))
783     _dl_fatal_printf ("cannot set up thread-local storage: %s\n", lossage);
784   tls_init_tp_called = true;
785
786   return tcbp;
787 }
788
789 #ifdef _LIBC_REENTRANT
790 /* _dl_error_catch_tsd points to this for the single-threaded case.
791    It's reset by the thread library for multithreaded programs.  */
792 void ** __attribute__ ((const))
793 _dl_initial_error_catch_tsd (void)
794 {
795   static void *data;
796   return &data;
797 }
798 #endif
799
800
801 static unsigned int
802 do_preload (char *fname, struct link_map *main_map, const char *where)
803 {
804   const char *objname;
805   const char *err_str = NULL;
806   struct map_args args;
807   bool malloced;
808
809   args.str = fname;
810   args.loader = main_map;
811   args.mode = __RTLD_SECURE;
812
813   unsigned int old_nloaded = GL(dl_ns)[LM_ID_BASE]._ns_nloaded;
814
815   (void) _dl_catch_error (&objname, &err_str, &malloced, map_doit, &args);
816   if (__builtin_expect (err_str != NULL, 0))
817     {
818       _dl_error_printf ("\
819 ERROR: ld.so: object '%s' from %s cannot be preloaded: ignored.\n",
820                         fname, where);
821       /* No need to call free, this is still before
822          the libc's malloc is used.  */
823     }
824   else if (GL(dl_ns)[LM_ID_BASE]._ns_nloaded != old_nloaded)
825     /* It is no duplicate.  */
826     return 1;
827
828   /* Nothing loaded.  */
829   return 0;
830 }
831
832 #if defined SHARED && defined _LIBC_REENTRANT \
833     && defined __rtld_lock_default_lock_recursive
834 static void
835 rtld_lock_default_lock_recursive (void *lock)
836 {
837   __rtld_lock_default_lock_recursive (lock);
838 }
839
840 static void
841 rtld_lock_default_unlock_recursive (void *lock)
842 {
843   __rtld_lock_default_unlock_recursive (lock);
844 }
845 #endif
846
847
848 static void
849 security_init (void)
850 {
851   /* Set up the stack checker's canary.  */
852   uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard (_dl_random);
853 #ifdef THREAD_SET_STACK_GUARD
854   THREAD_SET_STACK_GUARD (stack_chk_guard);
855 #else
856   __stack_chk_guard = stack_chk_guard;
857 #endif
858
859   /* Set up the pointer guard as well, if necessary.  */
860   if (GLRO(dl_pointer_guard))
861     {
862       uintptr_t pointer_chk_guard = _dl_setup_pointer_guard (_dl_random,
863                                                              stack_chk_guard);
864 #ifdef THREAD_SET_POINTER_GUARD
865       THREAD_SET_POINTER_GUARD (pointer_chk_guard);
866 #endif
867       __pointer_chk_guard_local = pointer_chk_guard;
868     }
869
870   /* We do not need the _dl_random value anymore.  The less
871      information we leave behind, the better, so clear the
872      variable.  */
873   _dl_random = NULL;
874 }
875
876 #include "setup-vdso.h"
877
878 /* The library search path.  */
879 static const char *library_path attribute_relro;
880 /* The list preloaded objects.  */
881 static const char *preloadlist attribute_relro;
882 /* Nonzero if information about versions has to be printed.  */
883 static int version_info attribute_relro;
884
885 static void
886 dl_main (const ElfW(Phdr) *phdr,
887          ElfW(Word) phnum,
888          ElfW(Addr) *user_entry,
889          ElfW(auxv_t) *auxv)
890 {
891   const ElfW(Phdr) *ph;
892   enum mode mode;
893   struct link_map *main_map;
894   size_t file_size;
895   char *file;
896   bool has_interp = false;
897   unsigned int i;
898   bool prelinked = false;
899   bool rtld_is_main = false;
900 #ifndef HP_TIMING_NONAVAIL
901   hp_timing_t start;
902   hp_timing_t stop;
903   hp_timing_t diff;
904 #endif
905   void *tcbp = NULL;
906
907 #ifdef _LIBC_REENTRANT
908   /* Explicit initialization since the reloc would just be more work.  */
909   GL(dl_error_catch_tsd) = &_dl_initial_error_catch_tsd;
910 #endif
911
912   GL(dl_init_static_tls) = &_dl_nothread_init_static_tls;
913
914 #if defined SHARED && defined _LIBC_REENTRANT \
915     && defined __rtld_lock_default_lock_recursive
916   GL(dl_rtld_lock_recursive) = rtld_lock_default_lock_recursive;
917   GL(dl_rtld_unlock_recursive) = rtld_lock_default_unlock_recursive;
918 #endif
919
920   /* The explicit initialization here is cheaper than processing the reloc
921      in the _rtld_local definition's initializer.  */
922   GL(dl_make_stack_executable_hook) = &_dl_make_stack_executable;
923
924   /* Process the environment variable which control the behaviour.  */
925   process_envvars (&mode);
926
927 #ifndef HAVE_INLINED_SYSCALLS
928   /* Set up a flag which tells we are just starting.  */
929   INTUSE(_dl_starting_up) = 1;
930 #endif
931
932   if (*user_entry == (ElfW(Addr)) ENTRY_POINT)
933     {
934       /* Ho ho.  We are not the program interpreter!  We are the program
935          itself!  This means someone ran ld.so as a command.  Well, that
936          might be convenient to do sometimes.  We support it by
937          interpreting the args like this:
938
939          ld.so PROGRAM ARGS...
940
941          The first argument is the name of a file containing an ELF
942          executable we will load and run with the following arguments.
943          To simplify life here, PROGRAM is searched for using the
944          normal rules for shared objects, rather than $PATH or anything
945          like that.  We just load it and use its entry point; we don't
946          pay attention to its PT_INTERP command (we are the interpreter
947          ourselves).  This is an easy way to test a new ld.so before
948          installing it.  */
949       rtld_is_main = true;
950
951       /* Note the place where the dynamic linker actually came from.  */
952       GL(dl_rtld_map).l_name = rtld_progname;
953
954       while (_dl_argc > 1)
955         if (! strcmp (INTUSE(_dl_argv)[1], "--list"))
956           {
957             mode = list;
958             GLRO(dl_lazy) = -1; /* This means do no dependency analysis.  */
959
960             ++_dl_skip_args;
961             --_dl_argc;
962             ++INTUSE(_dl_argv);
963           }
964         else if (! strcmp (INTUSE(_dl_argv)[1], "--verify"))
965           {
966             mode = verify;
967
968             ++_dl_skip_args;
969             --_dl_argc;
970             ++INTUSE(_dl_argv);
971           }
972         else if (! strcmp (INTUSE(_dl_argv)[1], "--inhibit-cache"))
973           {
974             GLRO(dl_inhibit_cache) = 1;
975             ++_dl_skip_args;
976             --_dl_argc;
977             ++INTUSE(_dl_argv);
978           }
979         else if (! strcmp (INTUSE(_dl_argv)[1], "--library-path")
980                  && _dl_argc > 2)
981           {
982             library_path = INTUSE(_dl_argv)[2];
983
984             _dl_skip_args += 2;
985             _dl_argc -= 2;
986             INTUSE(_dl_argv) += 2;
987           }
988         else if (! strcmp (INTUSE(_dl_argv)[1], "--inhibit-rpath")
989                  && _dl_argc > 2)
990           {
991             GLRO(dl_inhibit_rpath) = INTUSE(_dl_argv)[2];
992
993             _dl_skip_args += 2;
994             _dl_argc -= 2;
995             INTUSE(_dl_argv) += 2;
996           }
997         else if (! strcmp (INTUSE(_dl_argv)[1], "--audit") && _dl_argc > 2)
998           {
999             process_dl_audit (INTUSE(_dl_argv)[2]);
1000
1001             _dl_skip_args += 2;
1002             _dl_argc -= 2;
1003             INTUSE(_dl_argv) += 2;
1004           }
1005         else
1006           break;
1007
1008       /* If we have no further argument the program was called incorrectly.
1009          Grant the user some education.  */
1010       if (_dl_argc < 2)
1011         _dl_fatal_printf ("\
1012 Usage: ld.so [OPTION]... EXECUTABLE-FILE [ARGS-FOR-PROGRAM...]\n\
1013 You have invoked `ld.so', the helper program for shared library executables.\n\
1014 This program usually lives in the file `/lib/ld.so', and special directives\n\
1015 in executable files using ELF shared libraries tell the system's program\n\
1016 loader to load the helper program from this file.  This helper program loads\n\
1017 the shared libraries needed by the program executable, prepares the program\n\
1018 to run, and runs it.  You may invoke this helper program directly from the\n\
1019 command line to load and run an ELF executable file; this is like executing\n\
1020 that file itself, but always uses this helper program from the file you\n\
1021 specified, instead of the helper program file specified in the executable\n\
1022 file you run.  This is mostly of use for maintainers to test new versions\n\
1023 of this helper program; chances are you did not intend to run this program.\n\
1024 \n\
1025   --list                list all dependencies and how they are resolved\n\
1026   --verify              verify that given object really is a dynamically linked\n\
1027                         object we can handle\n\
1028   --inhibit-cache       Do not use " LD_SO_CACHE "\n\
1029   --library-path PATH   use given PATH instead of content of the environment\n\
1030                         variable LD_LIBRARY_PATH\n\
1031   --inhibit-rpath LIST  ignore RUNPATH and RPATH information in object names\n\
1032                         in LIST\n\
1033   --audit LIST          use objects named in LIST as auditors\n");
1034
1035       ++_dl_skip_args;
1036       --_dl_argc;
1037       ++INTUSE(_dl_argv);
1038
1039       /* The initialization of _dl_stack_flags done below assumes the
1040          executable's PT_GNU_STACK may have been honored by the kernel, and
1041          so a PT_GNU_STACK with PF_X set means the stack started out with
1042          execute permission.  However, this is not really true if the
1043          dynamic linker is the executable the kernel loaded.  For this
1044          case, we must reinitialize _dl_stack_flags to match the dynamic
1045          linker itself.  If the dynamic linker was built with a
1046          PT_GNU_STACK, then the kernel may have loaded us with a
1047          nonexecutable stack that we will have to make executable when we
1048          load the program below unless it has a PT_GNU_STACK indicating
1049          nonexecutable stack is ok.  */
1050
1051       for (ph = phdr; ph < &phdr[phnum]; ++ph)
1052         if (ph->p_type == PT_GNU_STACK)
1053           {
1054             GL(dl_stack_flags) = ph->p_flags;
1055             break;
1056           }
1057
1058       if (__builtin_expect (mode, normal) == verify)
1059         {
1060           const char *objname;
1061           const char *err_str = NULL;
1062           struct map_args args;
1063           bool malloced;
1064
1065           args.str = rtld_progname;
1066           args.loader = NULL;
1067           args.mode = __RTLD_OPENEXEC;
1068           (void) _dl_catch_error (&objname, &err_str, &malloced, map_doit,
1069                                   &args);
1070           if (__builtin_expect (err_str != NULL, 0))
1071             /* We don't free the returned string, the programs stops
1072                anyway.  */
1073             _exit (EXIT_FAILURE);
1074         }
1075       else
1076         {
1077           HP_TIMING_NOW (start);
1078           _dl_map_object (NULL, rtld_progname, lt_library, 0,
1079                           __RTLD_OPENEXEC, LM_ID_BASE);
1080           HP_TIMING_NOW (stop);
1081
1082           HP_TIMING_DIFF (load_time, start, stop);
1083         }
1084
1085       /* Now the map for the main executable is available.  */
1086       main_map = GL(dl_ns)[LM_ID_BASE]._ns_loaded;
1087
1088       if (__builtin_expect (mode, normal) == normal
1089           && GL(dl_rtld_map).l_info[DT_SONAME] != NULL
1090           && main_map->l_info[DT_SONAME] != NULL
1091           && strcmp ((const char *) D_PTR (&GL(dl_rtld_map), l_info[DT_STRTAB])
1092                      + GL(dl_rtld_map).l_info[DT_SONAME]->d_un.d_val,
1093                      (const char *) D_PTR (main_map, l_info[DT_STRTAB])
1094                      + main_map->l_info[DT_SONAME]->d_un.d_val) == 0)
1095         _dl_fatal_printf ("loader cannot load itself\n");
1096
1097       phdr = main_map->l_phdr;
1098       phnum = main_map->l_phnum;
1099       /* We overwrite here a pointer to a malloc()ed string.  But since
1100          the malloc() implementation used at this point is the dummy
1101          implementations which has no real free() function it does not
1102          makes sense to free the old string first.  */
1103       main_map->l_name = (char *) "";
1104       *user_entry = main_map->l_entry;
1105
1106 #ifdef HAVE_AUX_VECTOR
1107       /* Adjust the on-stack auxiliary vector so that it looks like the
1108          binary was executed directly.  */
1109       for (ElfW(auxv_t) *av = auxv; av->a_type != AT_NULL; av++)
1110         switch (av->a_type)
1111           {
1112           case AT_PHDR:
1113             av->a_un.a_val = (uintptr_t) phdr;
1114             break;
1115           case AT_PHNUM:
1116             av->a_un.a_val = phnum;
1117             break;
1118           case AT_ENTRY:
1119             av->a_un.a_val = *user_entry;
1120             break;
1121           }
1122 #endif
1123     }
1124   else
1125     {
1126       /* Create a link_map for the executable itself.
1127          This will be what dlopen on "" returns.  */
1128       main_map = _dl_new_object ((char *) "", "", lt_executable, NULL,
1129                                  __RTLD_OPENEXEC, LM_ID_BASE);
1130       assert (main_map != NULL);
1131       main_map->l_phdr = phdr;
1132       main_map->l_phnum = phnum;
1133       main_map->l_entry = *user_entry;
1134
1135       /* Even though the link map is not yet fully initialized we can add
1136          it to the map list since there are no possible users running yet.  */
1137       _dl_add_to_namespace_list (main_map, LM_ID_BASE);
1138       assert (main_map == GL(dl_ns)[LM_ID_BASE]._ns_loaded);
1139
1140       /* At this point we are in a bit of trouble.  We would have to
1141          fill in the values for l_dev and l_ino.  But in general we
1142          do not know where the file is.  We also do not handle AT_EXECFD
1143          even if it would be passed up.
1144
1145          We leave the values here defined to 0.  This is normally no
1146          problem as the program code itself is normally no shared
1147          object and therefore cannot be loaded dynamically.  Nothing
1148          prevent the use of dynamic binaries and in these situations
1149          we might get problems.  We might not be able to find out
1150          whether the object is already loaded.  But since there is no
1151          easy way out and because the dynamic binary must also not
1152          have an SONAME we ignore this program for now.  If it becomes
1153          a problem we can force people using SONAMEs.  */
1154
1155       /* We delay initializing the path structure until we got the dynamic
1156          information for the program.  */
1157     }
1158
1159   main_map->l_map_end = 0;
1160   main_map->l_text_end = 0;
1161   /* Perhaps the executable has no PT_LOAD header entries at all.  */
1162   main_map->l_map_start = ~0;
1163   /* And it was opened directly.  */
1164   ++main_map->l_direct_opencount;
1165
1166   /* Scan the program header table for the dynamic section.  */
1167   for (ph = phdr; ph < &phdr[phnum]; ++ph)
1168     switch (ph->p_type)
1169       {
1170       case PT_PHDR:
1171         /* Find out the load address.  */
1172         main_map->l_addr = (ElfW(Addr)) phdr - ph->p_vaddr;
1173         break;
1174       case PT_DYNAMIC:
1175         /* This tells us where to find the dynamic section,
1176            which tells us everything we need to do.  */
1177         main_map->l_ld = (void *) main_map->l_addr + ph->p_vaddr;
1178         break;
1179       case PT_INTERP:
1180         /* This "interpreter segment" was used by the program loader to
1181            find the program interpreter, which is this program itself, the
1182            dynamic linker.  We note what name finds us, so that a future
1183            dlopen call or DT_NEEDED entry, for something that wants to link
1184            against the dynamic linker as a shared library, will know that
1185            the shared object is already loaded.  */
1186         _dl_rtld_libname.name = ((const char *) main_map->l_addr
1187                                  + ph->p_vaddr);
1188         /* _dl_rtld_libname.next = NULL;        Already zero.  */
1189         GL(dl_rtld_map).l_libname = &_dl_rtld_libname;
1190
1191         /* Ordinarilly, we would get additional names for the loader from
1192            our DT_SONAME.  This can't happen if we were actually linked as
1193            a static executable (detect this case when we have no DYNAMIC).
1194            If so, assume the filename component of the interpreter path to
1195            be our SONAME, and add it to our name list.  */
1196         if (GL(dl_rtld_map).l_ld == NULL)
1197           {
1198             const char *p = NULL;
1199             const char *cp = _dl_rtld_libname.name;
1200
1201             /* Find the filename part of the path.  */
1202             while (*cp != '\0')
1203               if (*cp++ == '/')
1204                 p = cp;
1205
1206             if (p != NULL)
1207               {
1208                 _dl_rtld_libname2.name = p;
1209                 /* _dl_rtld_libname2.next = NULL;  Already zero.  */
1210                 _dl_rtld_libname.next = &_dl_rtld_libname2;
1211               }
1212           }
1213
1214         has_interp = true;
1215         break;
1216       case PT_LOAD:
1217         {
1218           ElfW(Addr) mapstart;
1219           ElfW(Addr) allocend;
1220
1221           /* Remember where the main program starts in memory.  */
1222           mapstart = (main_map->l_addr
1223                       + (ph->p_vaddr & ~(GLRO(dl_pagesize) - 1)));
1224           if (main_map->l_map_start > mapstart)
1225             main_map->l_map_start = mapstart;
1226
1227           /* Also where it ends.  */
1228           allocend = main_map->l_addr + ph->p_vaddr + ph->p_memsz;
1229           if (main_map->l_map_end < allocend)
1230             main_map->l_map_end = allocend;
1231           if ((ph->p_flags & PF_X) && allocend > main_map->l_text_end)
1232             main_map->l_text_end = allocend;
1233         }
1234         break;
1235
1236       case PT_TLS:
1237         if (ph->p_memsz > 0)
1238           {
1239             /* Note that in the case the dynamic linker we duplicate work
1240                here since we read the PT_TLS entry already in
1241                _dl_start_final.  But the result is repeatable so do not
1242                check for this special but unimportant case.  */
1243             main_map->l_tls_blocksize = ph->p_memsz;
1244             main_map->l_tls_align = ph->p_align;
1245             if (ph->p_align == 0)
1246               main_map->l_tls_firstbyte_offset = 0;
1247             else
1248               main_map->l_tls_firstbyte_offset = (ph->p_vaddr
1249                                                   & (ph->p_align - 1));
1250             main_map->l_tls_initimage_size = ph->p_filesz;
1251             main_map->l_tls_initimage = (void *) ph->p_vaddr;
1252
1253             /* This image gets the ID one.  */
1254             GL(dl_tls_max_dtv_idx) = main_map->l_tls_modid = 1;
1255           }
1256         break;
1257
1258       case PT_GNU_STACK:
1259         GL(dl_stack_flags) = ph->p_flags;
1260         break;
1261
1262       case PT_GNU_RELRO:
1263         main_map->l_relro_addr = ph->p_vaddr;
1264         main_map->l_relro_size = ph->p_memsz;
1265         break;
1266       }
1267
1268   /* Adjust the address of the TLS initialization image in case
1269      the executable is actually an ET_DYN object.  */
1270   if (main_map->l_tls_initimage != NULL)
1271     main_map->l_tls_initimage
1272       = (char *) main_map->l_tls_initimage + main_map->l_addr;
1273   if (! main_map->l_map_end)
1274     main_map->l_map_end = ~0;
1275   if (! main_map->l_text_end)
1276     main_map->l_text_end = ~0;
1277   if (! GL(dl_rtld_map).l_libname && GL(dl_rtld_map).l_name)
1278     {
1279       /* We were invoked directly, so the program might not have a
1280          PT_INTERP.  */
1281       _dl_rtld_libname.name = GL(dl_rtld_map).l_name;
1282       /* _dl_rtld_libname.next = NULL;  Already zero.  */
1283       GL(dl_rtld_map).l_libname =  &_dl_rtld_libname;
1284     }
1285   else
1286     assert (GL(dl_rtld_map).l_libname); /* How else did we get here?  */
1287
1288   /* If the current libname is different from the SONAME, add the
1289      latter as well.  */
1290   if (GL(dl_rtld_map).l_info[DT_SONAME] != NULL
1291       && strcmp (GL(dl_rtld_map).l_libname->name,
1292                  (const char *) D_PTR (&GL(dl_rtld_map), l_info[DT_STRTAB])
1293                  + GL(dl_rtld_map).l_info[DT_SONAME]->d_un.d_val) != 0)
1294     {
1295       static struct libname_list newname;
1296       newname.name = ((char *) D_PTR (&GL(dl_rtld_map), l_info[DT_STRTAB])
1297                       + GL(dl_rtld_map).l_info[DT_SONAME]->d_un.d_ptr);
1298       newname.next = NULL;
1299       newname.dont_free = 1;
1300
1301       assert (GL(dl_rtld_map).l_libname->next == NULL);
1302       GL(dl_rtld_map).l_libname->next = &newname;
1303     }
1304   /* The ld.so must be relocated since otherwise loading audit modules
1305      will fail since they reuse the very same ld.so.  */
1306   assert (GL(dl_rtld_map).l_relocated);
1307
1308   if (! rtld_is_main)
1309     {
1310       /* Extract the contents of the dynamic section for easy access.  */
1311       elf_get_dynamic_info (main_map, NULL);
1312       /* Set up our cache of pointers into the hash table.  */
1313       _dl_setup_hash (main_map);
1314     }
1315
1316   if (__builtin_expect (mode, normal) == verify)
1317     {
1318       /* We were called just to verify that this is a dynamic
1319          executable using us as the program interpreter.  Exit with an
1320          error if we were not able to load the binary or no interpreter
1321          is specified (i.e., this is no dynamically linked binary.  */
1322       if (main_map->l_ld == NULL)
1323         _exit (1);
1324
1325       /* We allow here some platform specific code.  */
1326 #ifdef DISTINGUISH_LIB_VERSIONS
1327       DISTINGUISH_LIB_VERSIONS;
1328 #endif
1329       _exit (has_interp ? 0 : 2);
1330     }
1331
1332   struct link_map **first_preload = &GL(dl_rtld_map).l_next;
1333   /* Set up the data structures for the system-supplied DSO early,
1334      so they can influence _dl_init_paths.  */
1335   setup_vdso (main_map, &first_preload);
1336
1337 #ifdef DL_SYSDEP_OSCHECK
1338   DL_SYSDEP_OSCHECK (_dl_fatal_printf);
1339 #endif
1340
1341   /* Initialize the data structures for the search paths for shared
1342      objects.  */
1343   _dl_init_paths (library_path);
1344
1345   /* Initialize _r_debug.  */
1346   struct r_debug *r = _dl_debug_initialize (GL(dl_rtld_map).l_addr,
1347                                             LM_ID_BASE);
1348   r->r_state = RT_CONSISTENT;
1349
1350   /* Put the link_map for ourselves on the chain so it can be found by
1351      name.  Note that at this point the global chain of link maps contains
1352      exactly one element, which is pointed to by dl_loaded.  */
1353   if (! GL(dl_rtld_map).l_name)
1354     /* If not invoked directly, the dynamic linker shared object file was
1355        found by the PT_INTERP name.  */
1356     GL(dl_rtld_map).l_name = (char *) GL(dl_rtld_map).l_libname->name;
1357   GL(dl_rtld_map).l_type = lt_library;
1358   main_map->l_next = &GL(dl_rtld_map);
1359   GL(dl_rtld_map).l_prev = main_map;
1360   ++GL(dl_ns)[LM_ID_BASE]._ns_nloaded;
1361   ++GL(dl_load_adds);
1362
1363   /* If LD_USE_LOAD_BIAS env variable has not been seen, default
1364      to not using bias for non-prelinked PIEs and libraries
1365      and using it for executables or prelinked PIEs or libraries.  */
1366   if (GLRO(dl_use_load_bias) == (ElfW(Addr)) -2)
1367     GLRO(dl_use_load_bias) = main_map->l_addr == 0 ? -1 : 0;
1368
1369   /* Set up the program header information for the dynamic linker
1370      itself.  It is needed in the dl_iterate_phdr() callbacks.  */
1371   ElfW(Ehdr) *rtld_ehdr = (ElfW(Ehdr) *) GL(dl_rtld_map).l_map_start;
1372   ElfW(Phdr) *rtld_phdr = (ElfW(Phdr) *) (GL(dl_rtld_map).l_map_start
1373                                           + rtld_ehdr->e_phoff);
1374   GL(dl_rtld_map).l_phdr = rtld_phdr;
1375   GL(dl_rtld_map).l_phnum = rtld_ehdr->e_phnum;
1376
1377
1378   /* PT_GNU_RELRO is usually the last phdr.  */
1379   size_t cnt = rtld_ehdr->e_phnum;
1380   while (cnt-- > 0)
1381     if (rtld_phdr[cnt].p_type == PT_GNU_RELRO)
1382       {
1383         GL(dl_rtld_map).l_relro_addr = rtld_phdr[cnt].p_vaddr;
1384         GL(dl_rtld_map).l_relro_size = rtld_phdr[cnt].p_memsz;
1385         break;
1386       }
1387
1388   /* Add the dynamic linker to the TLS list if it also uses TLS.  */
1389   if (GL(dl_rtld_map).l_tls_blocksize != 0)
1390     /* Assign a module ID.  Do this before loading any audit modules.  */
1391     GL(dl_rtld_map).l_tls_modid = _dl_next_tls_modid ();
1392
1393   /* If we have auditing DSOs to load, do it now.  */
1394   if (__builtin_expect (audit_list != NULL, 0))
1395     {
1396       /* Iterate over all entries in the list.  The order is important.  */
1397       struct audit_ifaces *last_audit = NULL;
1398       struct audit_list *al = audit_list->next;
1399
1400       /* Since we start using the auditing DSOs right away we need to
1401          initialize the data structures now.  */
1402       tcbp = init_tls ();
1403
1404       /* Initialize security features.  We need to do it this early
1405          since otherwise the constructors of the audit libraries will
1406          use different values (especially the pointer guard) and will
1407          fail later on.  */
1408       security_init ();
1409
1410       do
1411         {
1412           int tls_idx = GL(dl_tls_max_dtv_idx);
1413
1414           /* Now it is time to determine the layout of the static TLS
1415              block and allocate it for the initial thread.  Note that we
1416              always allocate the static block, we never defer it even if
1417              no DF_STATIC_TLS bit is set.  The reason is that we know
1418              glibc will use the static model.  */
1419           struct dlmopen_args dlmargs;
1420           dlmargs.fname = al->name;
1421           dlmargs.map = NULL;
1422
1423           const char *objname;
1424           const char *err_str = NULL;
1425           bool malloced;
1426           (void) _dl_catch_error (&objname, &err_str, &malloced, dlmopen_doit,
1427                                   &dlmargs);
1428           if (__builtin_expect (err_str != NULL, 0))
1429             {
1430             not_loaded:
1431               _dl_error_printf ("\
1432 ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
1433                                 al->name, err_str);
1434               if (malloced)
1435                 free ((char *) err_str);
1436             }
1437           else
1438             {
1439               struct lookup_args largs;
1440               largs.name = "la_version";
1441               largs.map = dlmargs.map;
1442
1443               /* Check whether the interface version matches.  */
1444               (void) _dl_catch_error (&objname, &err_str, &malloced,
1445                                       lookup_doit, &largs);
1446
1447               unsigned int (*laversion) (unsigned int);
1448               unsigned int lav;
1449               if  (err_str == NULL
1450                    && (laversion = largs.result) != NULL
1451                    && (lav = laversion (LAV_CURRENT)) > 0
1452                    && lav <= LAV_CURRENT)
1453                 {
1454                   /* Allocate structure for the callback function pointers.
1455                      This call can never fail.  */
1456                   union
1457                   {
1458                     struct audit_ifaces ifaces;
1459 #define naudit_ifaces 8
1460                     void (*fptr[naudit_ifaces]) (void);
1461                   } *newp = malloc (sizeof (*newp));
1462
1463                   /* Names of the auditing interfaces.  All in one
1464                      long string.  */
1465                   static const char audit_iface_names[] =
1466                     "la_activity\0"
1467                     "la_objsearch\0"
1468                     "la_objopen\0"
1469                     "la_preinit\0"
1470 #if __ELF_NATIVE_CLASS == 32
1471                     "la_symbind32\0"
1472 #elif __ELF_NATIVE_CLASS == 64
1473                     "la_symbind64\0"
1474 #else
1475 # error "__ELF_NATIVE_CLASS must be defined"
1476 #endif
1477 #define STRING(s) __STRING (s)
1478                     "la_" STRING (ARCH_LA_PLTENTER) "\0"
1479                     "la_" STRING (ARCH_LA_PLTEXIT) "\0"
1480                     "la_objclose\0";
1481                   unsigned int cnt = 0;
1482                   const char *cp = audit_iface_names;
1483                   do
1484                     {
1485                       largs.name = cp;
1486                       (void) _dl_catch_error (&objname, &err_str, &malloced,
1487                                               lookup_doit, &largs);
1488
1489                       /* Store the pointer.  */
1490                       if (err_str == NULL && largs.result != NULL)
1491                         {
1492                           newp->fptr[cnt] = largs.result;
1493
1494                           /* The dynamic linker link map is statically
1495                              allocated, initialize the data now.   */
1496                           GL(dl_rtld_map).l_audit[cnt].cookie
1497                             = (intptr_t) &GL(dl_rtld_map);
1498                         }
1499                       else
1500                         newp->fptr[cnt] = NULL;
1501                       ++cnt;
1502
1503                       cp = (char *) rawmemchr (cp, '\0') + 1;
1504                     }
1505                   while (*cp != '\0');
1506                   assert (cnt == naudit_ifaces);
1507
1508                   /* Now append the new auditing interface to the list.  */
1509                   newp->ifaces.next = NULL;
1510                   if (last_audit == NULL)
1511                     last_audit = GLRO(dl_audit) = &newp->ifaces;
1512                   else
1513                     last_audit = last_audit->next = &newp->ifaces;
1514                   ++GLRO(dl_naudit);
1515
1516                   /* Mark the DSO as being used for auditing.  */
1517                   dlmargs.map->l_auditing = 1;
1518                 }
1519               else
1520                 {
1521                   /* We cannot use the DSO, it does not have the
1522                      appropriate interfaces or it expects something
1523                      more recent.  */
1524 #ifndef NDEBUG
1525                   Lmid_t ns = dlmargs.map->l_ns;
1526 #endif
1527                   _dl_close (dlmargs.map);
1528
1529                   /* Make sure the namespace has been cleared entirely.  */
1530                   assert (GL(dl_ns)[ns]._ns_loaded == NULL);
1531                   assert (GL(dl_ns)[ns]._ns_nloaded == 0);
1532
1533                   GL(dl_tls_max_dtv_idx) = tls_idx;
1534                   goto not_loaded;
1535                 }
1536             }
1537
1538           al = al->next;
1539         }
1540       while (al != audit_list->next);
1541
1542       /* If we have any auditing modules, announce that we already
1543          have two objects loaded.  */
1544       if (__builtin_expect (GLRO(dl_naudit) > 0, 0))
1545         {
1546           struct link_map *ls[2] = { main_map, &GL(dl_rtld_map) };
1547
1548           for (unsigned int outer = 0; outer < 2; ++outer)
1549             {
1550               struct audit_ifaces *afct = GLRO(dl_audit);
1551               for (unsigned int cnt = 0; cnt < GLRO(dl_naudit); ++cnt)
1552                 {
1553                   if (afct->objopen != NULL)
1554                     {
1555                       ls[outer]->l_audit[cnt].bindflags
1556                         = afct->objopen (ls[outer], LM_ID_BASE,
1557                                          &ls[outer]->l_audit[cnt].cookie);
1558
1559                       ls[outer]->l_audit_any_plt
1560                         |= ls[outer]->l_audit[cnt].bindflags != 0;
1561                     }
1562
1563                   afct = afct->next;
1564                 }
1565             }
1566         }
1567     }
1568
1569   /* Set up debugging before the debugger is notified for the first time.  */
1570 #ifdef ELF_MACHINE_DEBUG_SETUP
1571   /* Some machines (e.g. MIPS) don't use DT_DEBUG in this way.  */
1572   ELF_MACHINE_DEBUG_SETUP (main_map, r);
1573   ELF_MACHINE_DEBUG_SETUP (&GL(dl_rtld_map), r);
1574 #else
1575   if (main_map->l_info[DT_DEBUG] != NULL)
1576     /* There is a DT_DEBUG entry in the dynamic section.  Fill it in
1577        with the run-time address of the r_debug structure  */
1578     main_map->l_info[DT_DEBUG]->d_un.d_ptr = (ElfW(Addr)) r;
1579
1580   /* Fill in the pointer in the dynamic linker's own dynamic section, in
1581      case you run gdb on the dynamic linker directly.  */
1582   if (GL(dl_rtld_map).l_info[DT_DEBUG] != NULL)
1583     GL(dl_rtld_map).l_info[DT_DEBUG]->d_un.d_ptr = (ElfW(Addr)) r;
1584 #endif
1585
1586   /* We start adding objects.  */
1587   r->r_state = RT_ADD;
1588   _dl_debug_state ();
1589   LIBC_PROBE (init_start, 2, LM_ID_BASE, r);
1590
1591   /* Auditing checkpoint: we are ready to signal that the initial map
1592      is being constructed.  */
1593   if (__builtin_expect (GLRO(dl_naudit) > 0, 0))
1594     {
1595       struct audit_ifaces *afct = GLRO(dl_audit);
1596       for (unsigned int cnt = 0; cnt < GLRO(dl_naudit); ++cnt)
1597         {
1598           if (afct->activity != NULL)
1599             afct->activity (&main_map->l_audit[cnt].cookie, LA_ACT_ADD);
1600
1601           afct = afct->next;
1602         }
1603     }
1604
1605   /* We have two ways to specify objects to preload: via environment
1606      variable and via the file /etc/ld.so.preload.  The latter can also
1607      be used when security is enabled.  */
1608   assert (*first_preload == NULL);
1609   struct link_map **preloads = NULL;
1610   unsigned int npreloads = 0;
1611
1612   if (__builtin_expect (preloadlist != NULL, 0))
1613     {
1614       /* The LD_PRELOAD environment variable gives list of libraries
1615          separated by white space or colons that are loaded before the
1616          executable's dependencies and prepended to the global scope
1617          list.  If the binary is running setuid all elements
1618          containing a '/' are ignored since it is insecure.  */
1619       char *list = strdupa (preloadlist);
1620       char *p;
1621
1622       HP_TIMING_NOW (start);
1623
1624       /* Prevent optimizing strsep.  Speed is not important here.  */
1625       while ((p = (strsep) (&list, " :")) != NULL)
1626         if (p[0] != '\0'
1627             && (__builtin_expect (! INTUSE(__libc_enable_secure), 1)
1628                 || strchr (p, '/') == NULL))
1629           npreloads += do_preload (p, main_map, "LD_PRELOAD");
1630
1631       HP_TIMING_NOW (stop);
1632       HP_TIMING_DIFF (diff, start, stop);
1633       HP_TIMING_ACCUM_NT (load_time, diff);
1634     }
1635
1636   /* There usually is no ld.so.preload file, it should only be used
1637      for emergencies and testing.  So the open call etc should usually
1638      fail.  Using access() on a non-existing file is faster than using
1639      open().  So we do this first.  If it succeeds we do almost twice
1640      the work but this does not matter, since it is not for production
1641      use.  */
1642   static const char preload_file[] = "/etc/ld.so.preload";
1643   if (__builtin_expect (__access (preload_file, R_OK) == 0, 0))
1644     {
1645       /* Read the contents of the file.  */
1646       file = _dl_sysdep_read_whole_file (preload_file, &file_size,
1647                                          PROT_READ | PROT_WRITE);
1648       if (__builtin_expect (file != MAP_FAILED, 0))
1649         {
1650           /* Parse the file.  It contains names of libraries to be loaded,
1651              separated by white spaces or `:'.  It may also contain
1652              comments introduced by `#'.  */
1653           char *problem;
1654           char *runp;
1655           size_t rest;
1656
1657           /* Eliminate comments.  */
1658           runp = file;
1659           rest = file_size;
1660           while (rest > 0)
1661             {
1662               char *comment = memchr (runp, '#', rest);
1663               if (comment == NULL)
1664                 break;
1665
1666               rest -= comment - runp;
1667               do
1668                 *comment = ' ';
1669               while (--rest > 0 && *++comment != '\n');
1670             }
1671
1672           /* We have one problematic case: if we have a name at the end of
1673              the file without a trailing terminating characters, we cannot
1674              place the \0.  Handle the case separately.  */
1675           if (file[file_size - 1] != ' ' && file[file_size - 1] != '\t'
1676               && file[file_size - 1] != '\n' && file[file_size - 1] != ':')
1677             {
1678               problem = &file[file_size];
1679               while (problem > file && problem[-1] != ' '
1680                      && problem[-1] != '\t'
1681                      && problem[-1] != '\n' && problem[-1] != ':')
1682                 --problem;
1683
1684               if (problem > file)
1685                 problem[-1] = '\0';
1686             }
1687           else
1688             {
1689               problem = NULL;
1690               file[file_size - 1] = '\0';
1691             }
1692
1693           HP_TIMING_NOW (start);
1694
1695           if (file != problem)
1696             {
1697               char *p;
1698               runp = file;
1699               while ((p = strsep (&runp, ": \t\n")) != NULL)
1700                 if (p[0] != '\0')
1701                   npreloads += do_preload (p, main_map, preload_file);
1702             }
1703
1704           if (problem != NULL)
1705             {
1706               char *p = strndupa (problem, file_size - (problem - file));
1707
1708               npreloads += do_preload (p, main_map, preload_file);
1709             }
1710
1711           HP_TIMING_NOW (stop);
1712           HP_TIMING_DIFF (diff, start, stop);
1713           HP_TIMING_ACCUM_NT (load_time, diff);
1714
1715           /* We don't need the file anymore.  */
1716           __munmap (file, file_size);
1717         }
1718     }
1719
1720   if (__builtin_expect (*first_preload != NULL, 0))
1721     {
1722       /* Set up PRELOADS with a vector of the preloaded libraries.  */
1723       struct link_map *l = *first_preload;
1724       preloads = __alloca (npreloads * sizeof preloads[0]);
1725       i = 0;
1726       do
1727         {
1728           preloads[i++] = l;
1729           l = l->l_next;
1730         } while (l);
1731       assert (i == npreloads);
1732     }
1733
1734   /* Load all the libraries specified by DT_NEEDED entries.  If LD_PRELOAD
1735      specified some libraries to load, these are inserted before the actual
1736      dependencies in the executable's searchlist for symbol resolution.  */
1737   HP_TIMING_NOW (start);
1738   _dl_map_object_deps (main_map, preloads, npreloads, mode == trace, 0);
1739   HP_TIMING_NOW (stop);
1740   HP_TIMING_DIFF (diff, start, stop);
1741   HP_TIMING_ACCUM_NT (load_time, diff);
1742
1743   /* Mark all objects as being in the global scope.  */
1744   for (i = main_map->l_searchlist.r_nlist; i > 0; )
1745     main_map->l_searchlist.r_list[--i]->l_global = 1;
1746
1747   /* Remove _dl_rtld_map from the chain.  */
1748   GL(dl_rtld_map).l_prev->l_next = GL(dl_rtld_map).l_next;
1749   if (GL(dl_rtld_map).l_next != NULL)
1750     GL(dl_rtld_map).l_next->l_prev = GL(dl_rtld_map).l_prev;
1751
1752   for (i = 1; i < main_map->l_searchlist.r_nlist; ++i)
1753     if (main_map->l_searchlist.r_list[i] == &GL(dl_rtld_map))
1754       break;
1755
1756   bool rtld_multiple_ref = false;
1757   if (__builtin_expect (i < main_map->l_searchlist.r_nlist, 1))
1758     {
1759       /* Some DT_NEEDED entry referred to the interpreter object itself, so
1760          put it back in the list of visible objects.  We insert it into the
1761          chain in symbol search order because gdb uses the chain's order as
1762          its symbol search order.  */
1763       rtld_multiple_ref = true;
1764
1765       GL(dl_rtld_map).l_prev = main_map->l_searchlist.r_list[i - 1];
1766       if (__builtin_expect (mode, normal) == normal)
1767         {
1768           GL(dl_rtld_map).l_next = (i + 1 < main_map->l_searchlist.r_nlist
1769                                     ? main_map->l_searchlist.r_list[i + 1]
1770                                     : NULL);
1771 #if defined NEED_DL_SYSINFO || defined NEED_DL_SYSINFO_DSO
1772           if (GLRO(dl_sysinfo_map) != NULL
1773               && GL(dl_rtld_map).l_prev->l_next == GLRO(dl_sysinfo_map)
1774               && GL(dl_rtld_map).l_next != GLRO(dl_sysinfo_map))
1775             GL(dl_rtld_map).l_prev = GLRO(dl_sysinfo_map);
1776 #endif
1777         }
1778       else
1779         /* In trace mode there might be an invisible object (which we
1780            could not find) after the previous one in the search list.
1781            In this case it doesn't matter much where we put the
1782            interpreter object, so we just initialize the list pointer so
1783            that the assertion below holds.  */
1784         GL(dl_rtld_map).l_next = GL(dl_rtld_map).l_prev->l_next;
1785
1786       assert (GL(dl_rtld_map).l_prev->l_next == GL(dl_rtld_map).l_next);
1787       GL(dl_rtld_map).l_prev->l_next = &GL(dl_rtld_map);
1788       if (GL(dl_rtld_map).l_next != NULL)
1789         {
1790           assert (GL(dl_rtld_map).l_next->l_prev == GL(dl_rtld_map).l_prev);
1791           GL(dl_rtld_map).l_next->l_prev = &GL(dl_rtld_map);
1792         }
1793     }
1794
1795   /* Now let us see whether all libraries are available in the
1796      versions we need.  */
1797   {
1798     struct version_check_args args;
1799     args.doexit = mode == normal;
1800     args.dotrace = mode == trace;
1801     _dl_receive_error (print_missing_version, version_check_doit, &args);
1802   }
1803
1804   /* We do not initialize any of the TLS functionality unless any of the
1805      initial modules uses TLS.  This makes dynamic loading of modules with
1806      TLS impossible, but to support it requires either eagerly doing setup
1807      now or lazily doing it later.  Doing it now makes us incompatible with
1808      an old kernel that can't perform TLS_INIT_TP, even if no TLS is ever
1809      used.  Trying to do it lazily is too hairy to try when there could be
1810      multiple threads (from a non-TLS-using libpthread).  */
1811   bool was_tls_init_tp_called = tls_init_tp_called;
1812   if (tcbp == NULL)
1813     tcbp = init_tls ();
1814
1815   if (__builtin_expect (audit_list == NULL, 1))
1816     /* Initialize security features.  But only if we have not done it
1817        earlier.  */
1818     security_init ();
1819
1820   if (__builtin_expect (mode, normal) != normal)
1821     {
1822       /* We were run just to list the shared libraries.  It is
1823          important that we do this before real relocation, because the
1824          functions we call below for output may no longer work properly
1825          after relocation.  */
1826       struct link_map *l;
1827
1828       if (GLRO(dl_debug_mask) & DL_DEBUG_PRELINK)
1829         {
1830           struct r_scope_elem *scope = &main_map->l_searchlist;
1831
1832           for (i = 0; i < scope->r_nlist; i++)
1833             {
1834               l = scope->r_list [i];
1835               if (l->l_faked)
1836                 {
1837                   _dl_printf ("\t%s => not found\n", l->l_libname->name);
1838                   continue;
1839                 }
1840               if (_dl_name_match_p (GLRO(dl_trace_prelink), l))
1841                 GLRO(dl_trace_prelink_map) = l;
1842               _dl_printf ("\t%s => %s (0x%0*Zx, 0x%0*Zx)",
1843                           l->l_libname->name[0] ? l->l_libname->name
1844                           : rtld_progname ?: "<main program>",
1845                           l->l_name[0] ? l->l_name
1846                           : rtld_progname ?: "<main program>",
1847                           (int) sizeof l->l_map_start * 2,
1848                           (size_t) l->l_map_start,
1849                           (int) sizeof l->l_addr * 2,
1850                           (size_t) l->l_addr);
1851
1852               if (l->l_tls_modid)
1853                 _dl_printf (" TLS(0x%Zx, 0x%0*Zx)\n", l->l_tls_modid,
1854                             (int) sizeof l->l_tls_offset * 2,
1855                             (size_t) l->l_tls_offset);
1856               else
1857                 _dl_printf ("\n");
1858             }
1859         }
1860       else if (GLRO(dl_debug_mask) & DL_DEBUG_UNUSED)
1861         {
1862           /* Look through the dependencies of the main executable
1863              and determine which of them is not actually
1864              required.  */
1865           struct link_map *l = main_map;
1866
1867           /* Relocate the main executable.  */
1868           struct relocate_args args = { .l = l,
1869                                         .reloc_mode = ((GLRO(dl_lazy)
1870                                                        ? RTLD_LAZY : 0)
1871                                                        | __RTLD_NOIFUNC) };
1872           _dl_receive_error (print_unresolved, relocate_doit, &args);
1873
1874           /* This loop depends on the dependencies of the executable to
1875              correspond in number and order to the DT_NEEDED entries.  */
1876           ElfW(Dyn) *dyn = main_map->l_ld;
1877           bool first = true;
1878           while (dyn->d_tag != DT_NULL)
1879             {
1880               if (dyn->d_tag == DT_NEEDED)
1881                 {
1882                   l = l->l_next;
1883 #if defined NEED_DL_SYSINFO || defined NEED_DL_SYSINFO_DSO
1884                   /* Skip the VDSO since it's not part of the list
1885                      of objects we brought in via DT_NEEDED entries.  */
1886                   if (l == GLRO(dl_sysinfo_map))
1887                     l = l->l_next;
1888 #endif
1889                   if (!l->l_used)
1890                     {
1891                       if (first)
1892                         {
1893                           _dl_printf ("Unused direct dependencies:\n");
1894                           first = false;
1895                         }
1896
1897                       _dl_printf ("\t%s\n", l->l_name);
1898                     }
1899                 }
1900
1901               ++dyn;
1902             }
1903
1904           _exit (first != true);
1905         }
1906       else if (! main_map->l_info[DT_NEEDED])
1907         _dl_printf ("\tstatically linked\n");
1908       else
1909         {
1910           for (l = main_map->l_next; l; l = l->l_next)
1911             if (l->l_faked)
1912               /* The library was not found.  */
1913               _dl_printf ("\t%s => not found\n", l->l_libname->name);
1914             else if (strcmp (l->l_libname->name, l->l_name) == 0)
1915               _dl_printf ("\t%s (0x%0*Zx)\n", l->l_libname->name,
1916                           (int) sizeof l->l_map_start * 2,
1917                           (size_t) l->l_map_start);
1918             else
1919               _dl_printf ("\t%s => %s (0x%0*Zx)\n", l->l_libname->name,
1920                           l->l_name, (int) sizeof l->l_map_start * 2,
1921                           (size_t) l->l_map_start);
1922         }
1923
1924       if (__builtin_expect (mode, trace) != trace)
1925         for (i = 1; i < (unsigned int) _dl_argc; ++i)
1926           {
1927             const ElfW(Sym) *ref = NULL;
1928             ElfW(Addr) loadbase;
1929             lookup_t result;
1930
1931             result = _dl_lookup_symbol_x (INTUSE(_dl_argv)[i], main_map,
1932                                           &ref, main_map->l_scope,
1933                                           NULL, ELF_RTYPE_CLASS_PLT,
1934                                           DL_LOOKUP_ADD_DEPENDENCY, NULL);
1935
1936             loadbase = LOOKUP_VALUE_ADDRESS (result);
1937
1938             _dl_printf ("%s found at 0x%0*Zd in object at 0x%0*Zd\n",
1939                         INTUSE(_dl_argv)[i],
1940                         (int) sizeof ref->st_value * 2,
1941                         (size_t) ref->st_value,
1942                         (int) sizeof loadbase * 2, (size_t) loadbase);
1943           }
1944       else
1945         {
1946           /* If LD_WARN is set, warn about undefined symbols.  */
1947           if (GLRO(dl_lazy) >= 0 && GLRO(dl_verbose))
1948             {
1949               /* We have to do symbol dependency testing.  */
1950               struct relocate_args args;
1951               unsigned int i;
1952
1953               args.reloc_mode = ((GLRO(dl_lazy) ? RTLD_LAZY : 0)
1954                                  | __RTLD_NOIFUNC);
1955
1956               i = main_map->l_searchlist.r_nlist;
1957               while (i-- > 0)
1958                 {
1959                   struct link_map *l = main_map->l_initfini[i];
1960                   if (l != &GL(dl_rtld_map) && ! l->l_faked)
1961                     {
1962                       args.l = l;
1963                       _dl_receive_error (print_unresolved, relocate_doit,
1964                                          &args);
1965                     }
1966                 }
1967
1968               if ((GLRO(dl_debug_mask) & DL_DEBUG_PRELINK)
1969                   && rtld_multiple_ref)
1970                 {
1971                   /* Mark the link map as not yet relocated again.  */
1972                   GL(dl_rtld_map).l_relocated = 0;
1973                   _dl_relocate_object (&GL(dl_rtld_map),
1974                                        main_map->l_scope, __RTLD_NOIFUNC, 0);
1975                 }
1976             }
1977 #define VERNEEDTAG (DT_NUM + DT_THISPROCNUM + DT_VERSIONTAGIDX (DT_VERNEED))
1978           if (version_info)
1979             {
1980               /* Print more information.  This means here, print information
1981                  about the versions needed.  */
1982               int first = 1;
1983               struct link_map *map;
1984
1985               for (map = main_map; map != NULL; map = map->l_next)
1986                 {
1987                   const char *strtab;
1988                   ElfW(Dyn) *dyn = map->l_info[VERNEEDTAG];
1989                   ElfW(Verneed) *ent;
1990
1991                   if (dyn == NULL)
1992                     continue;
1993
1994                   strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]);
1995                   ent = (ElfW(Verneed) *) (map->l_addr + dyn->d_un.d_ptr);
1996
1997                   if (first)
1998                     {
1999                       _dl_printf ("\n\tVersion information:\n");
2000                       first = 0;
2001                     }
2002
2003                   _dl_printf ("\t%s:\n",
2004                               map->l_name[0] ? map->l_name : rtld_progname);
2005
2006                   while (1)
2007                     {
2008                       ElfW(Vernaux) *aux;
2009                       struct link_map *needed;
2010
2011                       needed = find_needed (strtab + ent->vn_file);
2012                       aux = (ElfW(Vernaux) *) ((char *) ent + ent->vn_aux);
2013
2014                       while (1)
2015                         {
2016                           const char *fname = NULL;
2017
2018                           if (needed != NULL
2019                               && match_version (strtab + aux->vna_name,
2020                                                 needed))
2021                             fname = needed->l_name;
2022
2023                           _dl_printf ("\t\t%s (%s) %s=> %s\n",
2024                                       strtab + ent->vn_file,
2025                                       strtab + aux->vna_name,
2026                                       aux->vna_flags & VER_FLG_WEAK
2027                                       ? "[WEAK] " : "",
2028                                       fname ?: "not found");
2029
2030                           if (aux->vna_next == 0)
2031                             /* No more symbols.  */
2032                             break;
2033
2034                           /* Next symbol.  */
2035                           aux = (ElfW(Vernaux) *) ((char *) aux
2036                                                    + aux->vna_next);
2037                         }
2038
2039                       if (ent->vn_next == 0)
2040                         /* No more dependencies.  */
2041                         break;
2042
2043                       /* Next dependency.  */
2044                       ent = (ElfW(Verneed) *) ((char *) ent + ent->vn_next);
2045                     }
2046                 }
2047             }
2048         }
2049
2050       _exit (0);
2051     }
2052
2053   if (main_map->l_info[ADDRIDX (DT_GNU_LIBLIST)]
2054       && ! __builtin_expect (GLRO(dl_profile) != NULL, 0)
2055       && ! __builtin_expect (GLRO(dl_dynamic_weak), 0))
2056     {
2057       ElfW(Lib) *liblist, *liblistend;
2058       struct link_map **r_list, **r_listend, *l;
2059       const char *strtab = (const void *) D_PTR (main_map, l_info[DT_STRTAB]);
2060
2061       assert (main_map->l_info[VALIDX (DT_GNU_LIBLISTSZ)] != NULL);
2062       liblist = (ElfW(Lib) *)
2063                 main_map->l_info[ADDRIDX (DT_GNU_LIBLIST)]->d_un.d_ptr;
2064       liblistend = (ElfW(Lib) *)
2065                    ((char *) liblist +
2066                     main_map->l_info[VALIDX (DT_GNU_LIBLISTSZ)]->d_un.d_val);
2067       r_list = main_map->l_searchlist.r_list;
2068       r_listend = r_list + main_map->l_searchlist.r_nlist;
2069
2070       for (; r_list < r_listend && liblist < liblistend; r_list++)
2071         {
2072           l = *r_list;
2073
2074           if (l == main_map)
2075             continue;
2076
2077           /* If the library is not mapped where it should, fail.  */
2078           if (l->l_addr)
2079             break;
2080
2081           /* Next, check if checksum matches.  */
2082           if (l->l_info [VALIDX(DT_CHECKSUM)] == NULL
2083               || l->l_info [VALIDX(DT_CHECKSUM)]->d_un.d_val
2084                  != liblist->l_checksum)
2085             break;
2086
2087           if (l->l_info [VALIDX(DT_GNU_PRELINKED)] == NULL
2088               || l->l_info [VALIDX(DT_GNU_PRELINKED)]->d_un.d_val
2089                  != liblist->l_time_stamp)
2090             break;
2091
2092           if (! _dl_name_match_p (strtab + liblist->l_name, l))
2093             break;
2094
2095           ++liblist;
2096         }
2097
2098
2099       if (r_list == r_listend && liblist == liblistend)
2100         prelinked = true;
2101
2102       if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_LIBS, 0))
2103         _dl_debug_printf ("\nprelink checking: %s\n",
2104                           prelinked ? "ok" : "failed");
2105     }
2106
2107
2108   /* Now set up the variable which helps the assembler startup code.  */
2109   GL(dl_ns)[LM_ID_BASE]._ns_main_searchlist = &main_map->l_searchlist;
2110
2111   /* Save the information about the original global scope list since
2112      we need it in the memory handling later.  */
2113   GLRO(dl_initial_searchlist) = *GL(dl_ns)[LM_ID_BASE]._ns_main_searchlist;
2114
2115   /* Remember the last search directory added at startup, now that
2116      malloc will no longer be the one from dl-minimal.c.  */
2117   GLRO(dl_init_all_dirs) = GL(dl_all_dirs);
2118
2119   /* Print scope information.  */
2120   if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_SCOPES, 0))
2121     {
2122       _dl_debug_printf ("\nInitial object scopes\n");
2123
2124       for (struct link_map *l = main_map; l != NULL; l = l->l_next)
2125         _dl_show_scope (l, 0);
2126     }
2127
2128   if (prelinked)
2129     {
2130       if (main_map->l_info [ADDRIDX (DT_GNU_CONFLICT)] != NULL)
2131         {
2132           ElfW(Rela) *conflict, *conflictend;
2133 #ifndef HP_TIMING_NONAVAIL
2134           hp_timing_t start;
2135           hp_timing_t stop;
2136 #endif
2137
2138           HP_TIMING_NOW (start);
2139           assert (main_map->l_info [VALIDX (DT_GNU_CONFLICTSZ)] != NULL);
2140           conflict = (ElfW(Rela) *)
2141             main_map->l_info [ADDRIDX (DT_GNU_CONFLICT)]->d_un.d_ptr;
2142           conflictend = (ElfW(Rela) *)
2143             ((char *) conflict
2144              + main_map->l_info [VALIDX (DT_GNU_CONFLICTSZ)]->d_un.d_val);
2145           _dl_resolve_conflicts (main_map, conflict, conflictend);
2146           HP_TIMING_NOW (stop);
2147           HP_TIMING_DIFF (relocate_time, start, stop);
2148         }
2149
2150
2151       /* Mark all the objects so we know they have been already relocated.  */
2152       for (struct link_map *l = main_map; l != NULL; l = l->l_next)
2153         {
2154           l->l_relocated = 1;
2155           if (l->l_relro_size)
2156             _dl_protect_relro (l);
2157
2158           /* Add object to slot information data if necessasy.  */
2159           if (l->l_tls_blocksize != 0 && tls_init_tp_called)
2160             _dl_add_to_slotinfo (l);
2161         }
2162     }
2163   else
2164     {
2165       /* Now we have all the objects loaded.  Relocate them all except for
2166          the dynamic linker itself.  We do this in reverse order so that copy
2167          relocs of earlier objects overwrite the data written by later
2168          objects.  We do not re-relocate the dynamic linker itself in this
2169          loop because that could result in the GOT entries for functions we
2170          call being changed, and that would break us.  It is safe to relocate
2171          the dynamic linker out of order because it has no copy relocs (we
2172          know that because it is self-contained).  */
2173
2174       int consider_profiling = GLRO(dl_profile) != NULL;
2175 #ifndef HP_TIMING_NONAVAIL
2176       hp_timing_t start;
2177       hp_timing_t stop;
2178 #endif
2179
2180       /* If we are profiling we also must do lazy reloaction.  */
2181       GLRO(dl_lazy) |= consider_profiling;
2182
2183       HP_TIMING_NOW (start);
2184       unsigned i = main_map->l_searchlist.r_nlist;
2185       while (i-- > 0)
2186         {
2187           struct link_map *l = main_map->l_initfini[i];
2188
2189           /* While we are at it, help the memory handling a bit.  We have to
2190              mark some data structures as allocated with the fake malloc()
2191              implementation in ld.so.  */
2192           struct libname_list *lnp = l->l_libname->next;
2193
2194           while (__builtin_expect (lnp != NULL, 0))
2195             {
2196               lnp->dont_free = 1;
2197               lnp = lnp->next;
2198             }
2199           /* Also allocated with the fake malloc().  */
2200           l->l_free_initfini = 0;
2201
2202           if (l != &GL(dl_rtld_map))
2203             _dl_relocate_object (l, l->l_scope, GLRO(dl_lazy) ? RTLD_LAZY : 0,
2204                                  consider_profiling);
2205
2206           /* Add object to slot information data if necessasy.  */
2207           if (l->l_tls_blocksize != 0 && tls_init_tp_called)
2208             _dl_add_to_slotinfo (l);
2209         }
2210       HP_TIMING_NOW (stop);
2211
2212       HP_TIMING_DIFF (relocate_time, start, stop);
2213
2214       /* Now enable profiling if needed.  Like the previous call,
2215          this has to go here because the calls it makes should use the
2216          rtld versions of the functions (particularly calloc()), but it
2217          needs to have _dl_profile_map set up by the relocator.  */
2218       if (__builtin_expect (GL(dl_profile_map) != NULL, 0))
2219         /* We must prepare the profiling.  */
2220         _dl_start_profile ();
2221     }
2222
2223 #ifndef NONTLS_INIT_TP
2224 # define NONTLS_INIT_TP do { } while (0)
2225 #endif
2226
2227   if (!was_tls_init_tp_called && GL(dl_tls_max_dtv_idx) > 0)
2228     ++GL(dl_tls_generation);
2229
2230   /* Now that we have completed relocation, the initializer data
2231      for the TLS blocks has its final values and we can copy them
2232      into the main thread's TLS area, which we allocated above.  */
2233   _dl_allocate_tls_init (tcbp);
2234
2235   /* And finally install it for the main thread.  If ld.so itself uses
2236      TLS we know the thread pointer was initialized earlier.  */
2237   if (! tls_init_tp_called)
2238     {
2239       const char *lossage
2240 #ifdef USE___THREAD
2241         = TLS_INIT_TP (tcbp, USE___THREAD);
2242 #else
2243         = TLS_INIT_TP (tcbp, 0);
2244 #endif
2245       if (__builtin_expect (lossage != NULL, 0))
2246         _dl_fatal_printf ("cannot set up thread-local storage: %s\n",
2247                           lossage);
2248     }
2249
2250   /* Make sure no new search directories have been added.  */
2251   assert (GLRO(dl_init_all_dirs) == GL(dl_all_dirs));
2252
2253   if (! prelinked && rtld_multiple_ref)
2254     {
2255       /* There was an explicit ref to the dynamic linker as a shared lib.
2256          Re-relocate ourselves with user-controlled symbol definitions.
2257
2258          We must do this after TLS initialization in case after this
2259          re-relocation, we might call a user-supplied function
2260          (e.g. calloc from _dl_relocate_object) that uses TLS data.  */
2261
2262 #ifndef HP_TIMING_NONAVAIL
2263       hp_timing_t start;
2264       hp_timing_t stop;
2265       hp_timing_t add;
2266 #endif
2267
2268       HP_TIMING_NOW (start);
2269       /* Mark the link map as not yet relocated again.  */
2270       GL(dl_rtld_map).l_relocated = 0;
2271       _dl_relocate_object (&GL(dl_rtld_map), main_map->l_scope, 0, 0);
2272       HP_TIMING_NOW (stop);
2273       HP_TIMING_DIFF (add, start, stop);
2274       HP_TIMING_ACCUM_NT (relocate_time, add);
2275     }
2276
2277   /* Do any necessary cleanups for the startup OS interface code.
2278      We do these now so that no calls are made after rtld re-relocation
2279      which might be resolved to different functions than we expect.
2280      We cannot do this before relocating the other objects because
2281      _dl_relocate_object might need to call `mprotect' for DT_TEXTREL.  */
2282   _dl_sysdep_start_cleanup ();
2283
2284 #ifdef SHARED
2285   /* Auditing checkpoint: we have added all objects.  */
2286   if (__builtin_expect (GLRO(dl_naudit) > 0, 0))
2287     {
2288       struct link_map *head = GL(dl_ns)[LM_ID_BASE]._ns_loaded;
2289       /* Do not call the functions for any auditing object.  */
2290       if (head->l_auditing == 0)
2291         {
2292           struct audit_ifaces *afct = GLRO(dl_audit);
2293           for (unsigned int cnt = 0; cnt < GLRO(dl_naudit); ++cnt)
2294             {
2295               if (afct->activity != NULL)
2296                 afct->activity (&head->l_audit[cnt].cookie, LA_ACT_CONSISTENT);
2297
2298               afct = afct->next;
2299             }
2300         }
2301     }
2302 #endif
2303
2304   /* Notify the debugger all new objects are now ready to go.  We must re-get
2305      the address since by now the variable might be in another object.  */
2306   r = _dl_debug_initialize (0, LM_ID_BASE);
2307   r->r_state = RT_CONSISTENT;
2308   _dl_debug_state ();
2309   LIBC_PROBE (init_complete, 2, LM_ID_BASE, r);
2310
2311 #if defined USE_LDCONFIG && !defined MAP_COPY
2312   /* We must munmap() the cache file.  */
2313   _dl_unload_cache ();
2314 #endif
2315
2316   /* Once we return, _dl_sysdep_start will invoke
2317      the DT_INIT functions and then *USER_ENTRY.  */
2318 }
2319 \f
2320 /* This is a little helper function for resolving symbols while
2321    tracing the binary.  */
2322 static void
2323 print_unresolved (int errcode __attribute__ ((unused)), const char *objname,
2324                   const char *errstring)
2325 {
2326   if (objname[0] == '\0')
2327     objname = rtld_progname ?: "<main program>";
2328   _dl_error_printf ("%s (%s)\n", errstring, objname);
2329 }
2330 \f
2331 /* This is a little helper function for resolving symbols while
2332    tracing the binary.  */
2333 static void
2334 print_missing_version (int errcode __attribute__ ((unused)),
2335                        const char *objname, const char *errstring)
2336 {
2337   _dl_error_printf ("%s: %s: %s\n", rtld_progname ?: "<program name unknown>",
2338                     objname, errstring);
2339 }
2340 \f
2341 /* Nonzero if any of the debugging options is enabled.  */
2342 static int any_debug attribute_relro;
2343
2344 /* Process the string given as the parameter which explains which debugging
2345    options are enabled.  */
2346 static void
2347 process_dl_debug (const char *dl_debug)
2348 {
2349   /* When adding new entries make sure that the maximal length of a name
2350      is correctly handled in the LD_DEBUG_HELP code below.  */
2351   static const struct
2352   {
2353     unsigned char len;
2354     const char name[10];
2355     const char helptext[41];
2356     unsigned short int mask;
2357   } debopts[] =
2358     {
2359 #define LEN_AND_STR(str) sizeof (str) - 1, str
2360       { LEN_AND_STR ("libs"), "display library search paths",
2361         DL_DEBUG_LIBS | DL_DEBUG_IMPCALLS },
2362       { LEN_AND_STR ("reloc"), "display relocation processing",
2363         DL_DEBUG_RELOC | DL_DEBUG_IMPCALLS },
2364       { LEN_AND_STR ("files"), "display progress for input file",
2365         DL_DEBUG_FILES | DL_DEBUG_IMPCALLS },
2366       { LEN_AND_STR ("symbols"), "display symbol table processing",
2367         DL_DEBUG_SYMBOLS | DL_DEBUG_IMPCALLS },
2368       { LEN_AND_STR ("bindings"), "display information about symbol binding",
2369         DL_DEBUG_BINDINGS | DL_DEBUG_IMPCALLS },
2370       { LEN_AND_STR ("versions"), "display version dependencies",
2371         DL_DEBUG_VERSIONS | DL_DEBUG_IMPCALLS },
2372       { LEN_AND_STR ("scopes"), "display scope information",
2373         DL_DEBUG_SCOPES },
2374       { LEN_AND_STR ("all"), "all previous options combined",
2375         DL_DEBUG_LIBS | DL_DEBUG_RELOC | DL_DEBUG_FILES | DL_DEBUG_SYMBOLS
2376         | DL_DEBUG_BINDINGS | DL_DEBUG_VERSIONS | DL_DEBUG_IMPCALLS
2377         | DL_DEBUG_SCOPES },
2378       { LEN_AND_STR ("statistics"), "display relocation statistics",
2379         DL_DEBUG_STATISTICS },
2380       { LEN_AND_STR ("unused"), "determined unused DSOs",
2381         DL_DEBUG_UNUSED },
2382       { LEN_AND_STR ("help"), "display this help message and exit",
2383         DL_DEBUG_HELP },
2384     };
2385 #define ndebopts (sizeof (debopts) / sizeof (debopts[0]))
2386
2387   /* Skip separating white spaces and commas.  */
2388   while (*dl_debug != '\0')
2389     {
2390       if (*dl_debug != ' ' && *dl_debug != ',' && *dl_debug != ':')
2391         {
2392           size_t cnt;
2393           size_t len = 1;
2394
2395           while (dl_debug[len] != '\0' && dl_debug[len] != ' '
2396                  && dl_debug[len] != ',' && dl_debug[len] != ':')
2397             ++len;
2398
2399           for (cnt = 0; cnt < ndebopts; ++cnt)
2400             if (debopts[cnt].len == len
2401                 && memcmp (dl_debug, debopts[cnt].name, len) == 0)
2402               {
2403                 GLRO(dl_debug_mask) |= debopts[cnt].mask;
2404                 any_debug = 1;
2405                 break;
2406               }
2407
2408           if (cnt == ndebopts)
2409             {
2410               /* Display a warning and skip everything until next
2411                  separator.  */
2412               char *copy = strndupa (dl_debug, len);
2413               _dl_error_printf ("\
2414 warning: debug option `%s' unknown; try LD_DEBUG=help\n", copy);
2415             }
2416
2417           dl_debug += len;
2418           continue;
2419         }
2420
2421       ++dl_debug;
2422     }
2423
2424   if (GLRO(dl_debug_mask) & DL_DEBUG_UNUSED)
2425     {
2426       /* In order to get an accurate picture of whether a particular
2427          DT_NEEDED entry is actually used we have to process both
2428          the PLT and non-PLT relocation entries.  */
2429       GLRO(dl_lazy) = 0;
2430     }
2431
2432   if (GLRO(dl_debug_mask) & DL_DEBUG_HELP)
2433     {
2434       size_t cnt;
2435
2436       _dl_printf ("\
2437 Valid options for the LD_DEBUG environment variable are:\n\n");
2438
2439       for (cnt = 0; cnt < ndebopts; ++cnt)
2440         _dl_printf ("  %.*s%s%s\n", debopts[cnt].len, debopts[cnt].name,
2441                     "         " + debopts[cnt].len - 3,
2442                     debopts[cnt].helptext);
2443
2444       _dl_printf ("\n\
2445 To direct the debugging output into a file instead of standard output\n\
2446 a filename can be specified using the LD_DEBUG_OUTPUT environment variable.\n");
2447       _exit (0);
2448     }
2449 }
2450 \f
2451 static void
2452 process_dl_audit (char *str)
2453 {
2454   /* The parameter is a colon separated list of DSO names.  */
2455   char *p;
2456
2457   while ((p = (strsep) (&str, ":")) != NULL)
2458     if (p[0] != '\0'
2459         && (__builtin_expect (! INTUSE(__libc_enable_secure), 1)
2460             || strchr (p, '/') == NULL))
2461       {
2462         /* This is using the local malloc, not the system malloc.  The
2463            memory can never be freed.  */
2464         struct audit_list *newp = malloc (sizeof (*newp));
2465         newp->name = p;
2466
2467         if (audit_list == NULL)
2468           audit_list = newp->next = newp;
2469         else
2470           {
2471             newp->next = audit_list->next;
2472             audit_list = audit_list->next = newp;
2473           }
2474       }
2475 }
2476 \f
2477 /* Process all environments variables the dynamic linker must recognize.
2478    Since all of them start with `LD_' we are a bit smarter while finding
2479    all the entries.  */
2480 extern char **_environ attribute_hidden;
2481
2482
2483 static void
2484 process_envvars (enum mode *modep)
2485 {
2486   char **runp = _environ;
2487   char *envline;
2488   enum mode mode = normal;
2489   char *debug_output = NULL;
2490
2491   /* This is the default place for profiling data file.  */
2492   GLRO(dl_profile_output)
2493     = &"/var/tmp\0/var/profile"[INTUSE(__libc_enable_secure) ? 9 : 0];
2494
2495   while ((envline = _dl_next_ld_env_entry (&runp)) != NULL)
2496     {
2497       size_t len = 0;
2498
2499       while (envline[len] != '\0' && envline[len] != '=')
2500         ++len;
2501
2502       if (envline[len] != '=')
2503         /* This is a "LD_" variable at the end of the string without
2504            a '=' character.  Ignore it since otherwise we will access
2505            invalid memory below.  */
2506         continue;
2507
2508       switch (len)
2509         {
2510         case 4:
2511           /* Warning level, verbose or not.  */
2512           if (memcmp (envline, "WARN", 4) == 0)
2513             GLRO(dl_verbose) = envline[5] != '\0';
2514           break;
2515
2516         case 5:
2517           /* Debugging of the dynamic linker?  */
2518           if (memcmp (envline, "DEBUG", 5) == 0)
2519             {
2520               process_dl_debug (&envline[6]);
2521               break;
2522             }
2523           if (memcmp (envline, "AUDIT", 5) == 0)
2524             process_dl_audit (&envline[6]);
2525           break;
2526
2527         case 7:
2528           /* Print information about versions.  */
2529           if (memcmp (envline, "VERBOSE", 7) == 0)
2530             {
2531               version_info = envline[8] != '\0';
2532               break;
2533             }
2534
2535           /* List of objects to be preloaded.  */
2536           if (memcmp (envline, "PRELOAD", 7) == 0)
2537             {
2538               preloadlist = &envline[8];
2539               break;
2540             }
2541
2542           /* Which shared object shall be profiled.  */
2543           if (memcmp (envline, "PROFILE", 7) == 0 && envline[8] != '\0')
2544             GLRO(dl_profile) = &envline[8];
2545           break;
2546
2547         case 8:
2548           /* Do we bind early?  */
2549           if (memcmp (envline, "BIND_NOW", 8) == 0)
2550             {
2551               GLRO(dl_lazy) = envline[9] == '\0';
2552               break;
2553             }
2554           if (memcmp (envline, "BIND_NOT", 8) == 0)
2555             GLRO(dl_bind_not) = envline[9] != '\0';
2556           break;
2557
2558         case 9:
2559           /* Test whether we want to see the content of the auxiliary
2560              array passed up from the kernel.  */
2561           if (!INTUSE(__libc_enable_secure)
2562               && memcmp (envline, "SHOW_AUXV", 9) == 0)
2563             _dl_show_auxv ();
2564           break;
2565
2566         case 10:
2567           /* Mask for the important hardware capabilities.  */
2568           if (memcmp (envline, "HWCAP_MASK", 10) == 0)
2569             GLRO(dl_hwcap_mask) = __strtoul_internal (&envline[11], NULL,
2570                                                       0, 0);
2571           break;
2572
2573         case 11:
2574           /* Path where the binary is found.  */
2575           if (!INTUSE(__libc_enable_secure)
2576               && memcmp (envline, "ORIGIN_PATH", 11) == 0)
2577             GLRO(dl_origin_path) = &envline[12];
2578           break;
2579
2580         case 12:
2581           /* The library search path.  */
2582           if (memcmp (envline, "LIBRARY_PATH", 12) == 0)
2583             {
2584               library_path = &envline[13];
2585               break;
2586             }
2587
2588           /* Where to place the profiling data file.  */
2589           if (memcmp (envline, "DEBUG_OUTPUT", 12) == 0)
2590             {
2591               debug_output = &envline[13];
2592               break;
2593             }
2594
2595           if (!INTUSE(__libc_enable_secure)
2596               && memcmp (envline, "DYNAMIC_WEAK", 12) == 0)
2597             GLRO(dl_dynamic_weak) = 1;
2598           break;
2599
2600         case 13:
2601           /* We might have some extra environment variable with length 13
2602              to handle.  */
2603 #ifdef EXTRA_LD_ENVVARS_13
2604           EXTRA_LD_ENVVARS_13
2605 #endif
2606           if (!INTUSE(__libc_enable_secure)
2607               && memcmp (envline, "USE_LOAD_BIAS", 13) == 0)
2608             {
2609               GLRO(dl_use_load_bias) = envline[14] == '1' ? -1 : 0;
2610               break;
2611             }
2612
2613           if (memcmp (envline, "POINTER_GUARD", 13) == 0)
2614             GLRO(dl_pointer_guard) = envline[14] != '0';
2615           break;
2616
2617         case 14:
2618           /* Where to place the profiling data file.  */
2619           if (!INTUSE(__libc_enable_secure)
2620               && memcmp (envline, "PROFILE_OUTPUT", 14) == 0
2621               && envline[15] != '\0')
2622             GLRO(dl_profile_output) = &envline[15];
2623           break;
2624
2625         case 16:
2626           /* The mode of the dynamic linker can be set.  */
2627           if (memcmp (envline, "TRACE_PRELINKING", 16) == 0)
2628             {
2629               mode = trace;
2630               GLRO(dl_verbose) = 1;
2631               GLRO(dl_debug_mask) |= DL_DEBUG_PRELINK;
2632               GLRO(dl_trace_prelink) = &envline[17];
2633             }
2634           break;
2635
2636         case 20:
2637           /* The mode of the dynamic linker can be set.  */
2638           if (memcmp (envline, "TRACE_LOADED_OBJECTS", 20) == 0)
2639             mode = trace;
2640           break;
2641
2642           /* We might have some extra environment variable to handle.  This
2643              is tricky due to the pre-processing of the length of the name
2644              in the switch statement here.  The code here assumes that added
2645              environment variables have a different length.  */
2646 #ifdef EXTRA_LD_ENVVARS
2647           EXTRA_LD_ENVVARS
2648 #endif
2649         }
2650     }
2651
2652   /* The caller wants this information.  */
2653   *modep = mode;
2654
2655   /* Extra security for SUID binaries.  Remove all dangerous environment
2656      variables.  */
2657   if (__builtin_expect (INTUSE(__libc_enable_secure), 0))
2658     {
2659       static const char unsecure_envvars[] =
2660 #ifdef EXTRA_UNSECURE_ENVVARS
2661         EXTRA_UNSECURE_ENVVARS
2662 #endif
2663         UNSECURE_ENVVARS;
2664       const char *nextp;
2665
2666       nextp = unsecure_envvars;
2667       do
2668         {
2669           unsetenv (nextp);
2670           /* We could use rawmemchr but this need not be fast.  */
2671           nextp = (char *) (strchr) (nextp, '\0') + 1;
2672         }
2673       while (*nextp != '\0');
2674
2675       if (__access ("/etc/suid-debug", F_OK) != 0)
2676         {
2677           unsetenv ("MALLOC_CHECK_");
2678           GLRO(dl_debug_mask) = 0;
2679         }
2680
2681       if (mode != normal)
2682         _exit (5);
2683     }
2684   /* If we have to run the dynamic linker in debugging mode and the
2685      LD_DEBUG_OUTPUT environment variable is given, we write the debug
2686      messages to this file.  */
2687   else if (any_debug && debug_output != NULL)
2688     {
2689 #ifdef O_NOFOLLOW
2690       const int flags = O_WRONLY | O_APPEND | O_CREAT | O_NOFOLLOW;
2691 #else
2692       const int flags = O_WRONLY | O_APPEND | O_CREAT;
2693 #endif
2694       size_t name_len = strlen (debug_output);
2695       char buf[name_len + 12];
2696       char *startp;
2697
2698       buf[name_len + 11] = '\0';
2699       startp = _itoa (__getpid (), &buf[name_len + 11], 10, 0);
2700       *--startp = '.';
2701       startp = memcpy (startp - name_len, debug_output, name_len);
2702
2703       GLRO(dl_debug_fd) = __open (startp, flags, DEFFILEMODE);
2704       if (GLRO(dl_debug_fd) == -1)
2705         /* We use standard output if opening the file failed.  */
2706         GLRO(dl_debug_fd) = STDOUT_FILENO;
2707     }
2708 }
2709
2710
2711 /* Print the various times we collected.  */
2712 static void
2713 __attribute ((noinline))
2714 print_statistics (hp_timing_t *rtld_total_timep)
2715 {
2716 #ifndef HP_TIMING_NONAVAIL
2717   char buf[200];
2718   char *cp;
2719   char *wp;
2720
2721   /* Total time rtld used.  */
2722   if (HP_TIMING_AVAIL)
2723     {
2724       HP_TIMING_PRINT (buf, sizeof (buf), *rtld_total_timep);
2725       _dl_debug_printf ("\nruntime linker statistics:\n"
2726                         "  total startup time in dynamic loader: %s\n", buf);
2727
2728       /* Print relocation statistics.  */
2729       char pbuf[30];
2730       HP_TIMING_PRINT (buf, sizeof (buf), relocate_time);
2731       cp = _itoa ((1000ULL * relocate_time) / *rtld_total_timep,
2732                   pbuf + sizeof (pbuf), 10, 0);
2733       wp = pbuf;
2734       switch (pbuf + sizeof (pbuf) - cp)
2735         {
2736         case 3:
2737           *wp++ = *cp++;
2738         case 2:
2739           *wp++ = *cp++;
2740         case 1:
2741           *wp++ = '.';
2742           *wp++ = *cp++;
2743         }
2744       *wp = '\0';
2745       _dl_debug_printf ("\
2746             time needed for relocation: %s (%s%%)\n", buf, pbuf);
2747     }
2748 #endif
2749
2750   unsigned long int num_relative_relocations = 0;
2751   for (Lmid_t ns = 0; ns < GL(dl_nns); ++ns)
2752     {
2753       if (GL(dl_ns)[ns]._ns_loaded == NULL)
2754         continue;
2755
2756       struct r_scope_elem *scope = &GL(dl_ns)[ns]._ns_loaded->l_searchlist;
2757
2758       for (unsigned int i = 0; i < scope->r_nlist; i++)
2759         {
2760           struct link_map *l = scope->r_list [i];
2761
2762           if (l->l_addr != 0 && l->l_info[VERSYMIDX (DT_RELCOUNT)])
2763             num_relative_relocations
2764               += l->l_info[VERSYMIDX (DT_RELCOUNT)]->d_un.d_val;
2765 #ifndef ELF_MACHINE_REL_RELATIVE
2766           /* Relative relocations are processed on these architectures if
2767              library is loaded to different address than p_vaddr or
2768              if not prelinked.  */
2769           if ((l->l_addr != 0 || !l->l_info[VALIDX(DT_GNU_PRELINKED)])
2770               && l->l_info[VERSYMIDX (DT_RELACOUNT)])
2771 #else
2772           /* On e.g. IA-64 or Alpha, relative relocations are processed
2773              only if library is loaded to different address than p_vaddr.  */
2774           if (l->l_addr != 0 && l->l_info[VERSYMIDX (DT_RELACOUNT)])
2775 #endif
2776             num_relative_relocations
2777               += l->l_info[VERSYMIDX (DT_RELACOUNT)]->d_un.d_val;
2778         }
2779     }
2780
2781   _dl_debug_printf ("                 number of relocations: %lu\n"
2782                     "      number of relocations from cache: %lu\n"
2783                     "        number of relative relocations: %lu\n",
2784                     GL(dl_num_relocations),
2785                     GL(dl_num_cache_relocations),
2786                     num_relative_relocations);
2787
2788 #ifndef HP_TIMING_NONAVAIL
2789   /* Time spend while loading the object and the dependencies.  */
2790   if (HP_TIMING_AVAIL)
2791     {
2792       char pbuf[30];
2793       HP_TIMING_PRINT (buf, sizeof (buf), load_time);
2794       cp = _itoa ((1000ULL * load_time) / *rtld_total_timep,
2795                   pbuf + sizeof (pbuf), 10, 0);
2796       wp = pbuf;
2797       switch (pbuf + sizeof (pbuf) - cp)
2798         {
2799         case 3:
2800           *wp++ = *cp++;
2801         case 2:
2802           *wp++ = *cp++;
2803         case 1:
2804           *wp++ = '.';
2805           *wp++ = *cp++;
2806         }
2807       *wp = '\0';
2808       _dl_debug_printf ("\
2809            time needed to load objects: %s (%s%%)\n",
2810                                 buf, pbuf);
2811     }
2812 #endif
2813 }