rtld_map.l_ld = (void *) rtld_map.l_addr + *elf_machine_got (); elf_get_dynamic_info (rtld_map.l_ld, rtld_map.l_info);
bootstrap_map.l_ld = (void *) bootstrap_map.l_addr + *elf_machine_got (); elf_get_dynamic_info (bootstrap_map.l_ld, bootstrap_map.l_info);
_dl_start (void *arg){  struct link_map rtld_map;  /* Figure out the run-time load address of the dynamic linker itself.  */  rtld_map.l_addr = elf_machine_load_address ();  /* Read our own dynamic section and fill in the info array.     Conveniently, the first element of the GOT contains the     offset of _DYNAMIC relative to the run-time load address.  */  rtld_map.l_ld = (void *) rtld_map.l_addr + *elf_machine_got ();  elf_get_dynamic_info (rtld_map.l_ld, rtld_map.l_info);#ifdef ELF_MACHINE_BEFORE_RTLD_RELOC  ELF_MACHINE_BEFORE_RTLD_RELOC (rtld_map.l_info);#endif  /* Relocate ourselves so we can do normal function calls and     data access using the global offset table.  */  /* We must initialize `l_type' to make sure it is not `lt_interpreter'.     That is the type to describe us, but not during bootstrapping--it     indicates to elf_machine_rel{,a} that we were already relocated during     bootstrapping, so it must anti-perform each bootstrapping relocation     before applying the final relocation when ld.so is linked in as     normal a shared library.  */  rtld_map.l_type = lt_library;  ELF_DYNAMIC_RELOCATE (&rtld_map, 0, NULL);  /* Now life is sane; we can call functions and access global data.     Set up to use the operating system facilities, and find out from     the operating system's program loader where to find the program     header table in core.  */  dl_r_debug.r_ldbase = rtld_map.l_addr; /* Record our load address.  */  /* Call the OS-dependent function to set up life so we can do things like     file access.  It will call `dl_main' (below) to do all the real work     of the dynamic linker, and then unwind our frame and run the user     entry point on the same stack we entered on.  */  return _dl_sysdep_start (&arg, &dl_main);}