mirror of
https://github.com/dashpay/dash.git
synced 2024-12-27 13:03:17 +01:00
7084e52141
647f7e5f1da1089d451f3c431efc635b8e87b064 guix: Also sort SHA256SUMS.part (Carl Dong) dc4137a60c99979b89f75d2bddba96d043f387b8 guix: Build depends/qt with our platform definition (Carl Dong) 16b0a936e15b81710755303e11ef51f608b61475 guix: Rebase toolchain on glibc 2.24 (2.27 for riscv64) (Carl Dong) Pull request description: After this PR, we'll have the following: - riscv64 -> build with a toolchain targeting glibc 2.27 - everything else -> builds with a toolchain targeting glibc 2.24, but will not have symbols > 2.17 (checked by `symbol-check.py`) ACKs for top commit: achow101: reACK 647f7e5f1da1089d451f3c431efc635b8e87b064 hebasto: ACK 647f7e5f1da1089d451f3c431efc635b8e87b064 MarcoFalke: review ACK 647f7e5f1da1089d451f3c431efc635b8e87b064 fanquake: ACK 647f7e5f1da1089d451f3c431efc635b8e87b064 - documentation can be fixed shortly. Tree-SHA512: ddff57a5d7c053687b0a273720d4ad7d28c6fc8816226d4304869284d017af5e3630d4b57565d91e74f2e1b7583c9c83ee8b2e5e70e41d619ab618e602c97a94
61 lines
2.4 KiB
Diff
61 lines
2.4 KiB
Diff
commit 6b02af31e9a721bb15a11380cd22d53b621711f8
|
|
Author: Szabolcs Nagy <szabolcs.nagy@arm.com>
|
|
Date: Wed Oct 18 17:26:23 2017 +0100
|
|
|
|
[AARCH64] Rewrite elf_machine_load_address using _DYNAMIC symbol
|
|
|
|
This patch rewrites aarch64 elf_machine_load_address to use special _DYNAMIC
|
|
symbol instead of _dl_start.
|
|
|
|
The static address of _DYNAMIC symbol is stored in the first GOT entry.
|
|
Here is the change which makes this solution work (part of binutils 2.24):
|
|
https://sourceware.org/ml/binutils/2013-06/msg00248.html
|
|
|
|
i386, x86_64 targets use the same method to do this as well.
|
|
|
|
The original implementation relies on a trick that R_AARCH64_ABS32 relocation
|
|
being resolved at link time and the static address fits in the 32bits.
|
|
However, in LP64, normally, the address is defined to be 64 bit.
|
|
|
|
Here is the C version one which should be portable in all cases.
|
|
|
|
* sysdeps/aarch64/dl-machine.h (elf_machine_load_address): Use
|
|
_DYNAMIC symbol to calculate load address.
|
|
|
|
diff --git a/sysdeps/aarch64/dl-machine.h b/sysdeps/aarch64/dl-machine.h
|
|
index e86d8b5b63..5a5b8a5de5 100644
|
|
--- a/sysdeps/aarch64/dl-machine.h
|
|
+++ b/sysdeps/aarch64/dl-machine.h
|
|
@@ -49,26 +49,11 @@ elf_machine_load_address (void)
|
|
/* To figure out the load address we use the definition that for any symbol:
|
|
dynamic_addr(symbol) = static_addr(symbol) + load_addr
|
|
|
|
- The choice of symbol is arbitrary. The static address we obtain
|
|
- by constructing a non GOT reference to the symbol, the dynamic
|
|
- address of the symbol we compute using adrp/add to compute the
|
|
- symbol's address relative to the PC.
|
|
- This depends on 32bit relocations being resolved at link time
|
|
- and that the static address fits in the 32bits. */
|
|
-
|
|
- ElfW(Addr) static_addr;
|
|
- ElfW(Addr) dynamic_addr;
|
|
-
|
|
- asm (" \n"
|
|
-" adrp %1, _dl_start; \n"
|
|
-" add %1, %1, #:lo12:_dl_start \n"
|
|
-" ldr %w0, 1f \n"
|
|
-" b 2f \n"
|
|
-"1: \n"
|
|
-" .word _dl_start \n"
|
|
-"2: \n"
|
|
- : "=r" (static_addr), "=r" (dynamic_addr));
|
|
- return dynamic_addr - static_addr;
|
|
+ _DYNAMIC sysmbol is used here as its link-time address stored in
|
|
+ the special unrelocated first GOT entry. */
|
|
+
|
|
+ extern ElfW(Dyn) _DYNAMIC[] attribute_hidden;
|
|
+ return (ElfW(Addr)) &_DYNAMIC - elf_machine_dynamic ();
|
|
}
|
|
|
|
/* Set up the loaded object described by L so its unrelocated PLT
|