(elf_machine_load_address): Compute the difference between base address and

first PT_LOAD's virtual address, not the base address.
This commit is contained in:
Ulrich Drepper 2001-09-22 21:32:57 +00:00
parent 177ac300b9
commit 8755441d32

View File

@ -70,16 +70,20 @@ elf_machine_load_address (void)
Elf64_Addr dot; Elf64_Addr dot;
long int zero_disp; long int zero_disp;
asm("br %0, 1f\n\t" asm("br %0, 1f\n"
".weak __load_address_undefined\n\t" "0:\n\t"
"br $0, __load_address_undefined\n" "br $0, 2f\n"
"1:" "1:\n\t"
".data\n"
"2:\n\t"
".quad 0b\n\t"
".previous"
: "=r"(dot)); : "=r"(dot));
zero_disp = *(int *)dot; zero_disp = *(int *) dot;
zero_disp = (zero_disp << 43) >> 41; zero_disp = (zero_disp << 43) >> 41;
return dot + 4 + zero_disp; return dot - *(Elf64_Addr *) (dot + 4 + zero_disp);
} }
/* Set up the loaded object described by L so its unrelocated PLT /* Set up the loaded object described by L so its unrelocated PLT