Changeset View
Changeset View
Standalone View
Standalone View
head/sys/powerpc/powerpc/elf32_machdep.c
Show First 20 Lines • Show All 397 Lines • ▼ Show 20 Lines | ppc32_runtime_resolve() | ||||
/* | /* | ||||
* Since we don't support lazy binding, panic immediately if anyone | * Since we don't support lazy binding, panic immediately if anyone | ||||
* manages to call the runtime resolver. | * manages to call the runtime resolver. | ||||
*/ | */ | ||||
panic("kldload: Runtime resolver was called unexpectedly!"); | panic("kldload: Runtime resolver was called unexpectedly!"); | ||||
} | } | ||||
int | int | ||||
elf_cpu_parse_dynamic(linker_file_t lf, Elf_Dyn *dynamic) | elf_cpu_parse_dynamic(caddr_t loadbase, Elf_Dyn *dynamic) | ||||
{ | { | ||||
Elf_Dyn *dp; | Elf_Dyn *dp; | ||||
bool has_plt = false; | bool has_plt = false; | ||||
bool secure_plt = false; | bool secure_plt = false; | ||||
Elf_Addr *got; | Elf_Addr *got; | ||||
for (dp = dynamic; dp->d_tag != DT_NULL; dp++) { | for (dp = dynamic; dp->d_tag != DT_NULL; dp++) { | ||||
switch (dp->d_tag) { | switch (dp->d_tag) { | ||||
case DT_PPC_GOT: | case DT_PPC_GOT: | ||||
secure_plt = true; | secure_plt = true; | ||||
got = (Elf_Addr *)(lf->address + dp->d_un.d_ptr); | got = (Elf_Addr *)(loadbase + dp->d_un.d_ptr); | ||||
/* Install runtime resolver canary. */ | /* Install runtime resolver canary. */ | ||||
got[1] = (Elf_Addr)ppc32_runtime_resolve; | got[1] = (Elf_Addr)ppc32_runtime_resolve; | ||||
got[2] = (Elf_Addr)0; | got[2] = (Elf_Addr)0; | ||||
break; | break; | ||||
case DT_PLTGOT: | case DT_PLTGOT: | ||||
has_plt = true; | has_plt = true; | ||||
break; | break; | ||||
} | } | ||||
Show All 34 Lines |