Changeset View
Changeset View
Standalone View
Standalone View
libexec/rtld-elf/rtld.c
Show First 20 Lines • Show All 506 Lines • ▼ Show 20 Lines | if (phdr == obj_rtld.phdr) { | ||||
* after the terminating NULL, we must shift | * after the terminating NULL, we must shift | ||||
* environment and aux as well. | * environment and aux as well. | ||||
*/ | */ | ||||
main_argc = argc - rtld_argc; | main_argc = argc - rtld_argc; | ||||
for (i = 0; i <= main_argc; i++) | for (i = 0; i <= main_argc; i++) | ||||
argv[i] = argv[i + rtld_argc]; | argv[i] = argv[i + rtld_argc]; | ||||
*argcp -= rtld_argc; | *argcp -= rtld_argc; | ||||
environ = env = envp = argv + main_argc + 1; | environ = env = envp = argv + main_argc + 1; | ||||
dbg("move env from %p to %p", envp + rtld_argc, envp); | |||||
do { | do { | ||||
*envp = *(envp + rtld_argc); | *envp = *(envp + rtld_argc); | ||||
envp++; | } while (*envp++ != NULL); | ||||
} while (*envp != NULL); | |||||
aux = auxp = (Elf_Auxinfo *)envp; | aux = auxp = (Elf_Auxinfo *)envp; | ||||
auxpf = (Elf_Auxinfo *)(envp + rtld_argc); | auxpf = (Elf_Auxinfo *)(envp + rtld_argc); | ||||
dbg("move aux from %p to %p", auxpf, aux); | |||||
for (;; auxp++, auxpf++) { | for (;; auxp++, auxpf++) { | ||||
*auxp = *auxpf; | *auxp = *auxpf; | ||||
if (auxp->a_type == AT_NULL) | if (auxp->a_type == AT_NULL) | ||||
break; | break; | ||||
} | } | ||||
/* Since the auxiliary vector has moved, redigest it. */ | /* Since the auxiliary vector has moved, redigest it. */ | ||||
for (i = 0; i < AT_COUNT; i++) | for (i = 0; i < AT_COUNT; i++) | ||||
aux_info[i] = NULL; | aux_info[i] = NULL; | ||||
▲ Show 20 Lines • Show All 5,210 Lines • Show Last 20 Lines |