aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/alpha/dl-machine.h
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/alpha/dl-machine.h')
-rw-r--r--sysdeps/alpha/dl-machine.h16
1 files changed, 10 insertions, 6 deletions
diff --git a/sysdeps/alpha/dl-machine.h b/sysdeps/alpha/dl-machine.h
index 2a414ca448..a039f245db 100644
--- a/sysdeps/alpha/dl-machine.h
+++ b/sysdeps/alpha/dl-machine.h
@@ -70,16 +70,20 @@ elf_machine_load_address (void)
Elf64_Addr dot;
long int zero_disp;
- asm("br %0, 1f\n\t"
- ".weak __load_address_undefined\n\t"
- "br $0, __load_address_undefined\n"
- "1:"
+ asm("br %0, 1f\n"
+ "0:\n\t"
+ "br $0, 2f\n"
+ "1:\n\t"
+ ".data\n"
+ "2:\n\t"
+ ".quad 0b\n\t"
+ ".previous"
: "=r"(dot));
- zero_disp = *(int *)dot;
+ zero_disp = *(int *) dot;
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