mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2024-11-24 12:39:59 +00:00
Fixed AArch64 TLS relocation resolution.
bfd/ * elf64-aarch64.c (elf64_aarch64_tls_howto_table): Fix shift value for R_AARCH64_TLSIE_LD_GOTTPREL_PREL19, R_AARCH64_TLSLE_MOVW_TPREL_G2, R_AARCH64_TLSLE_MOVW_TPREL_G1, R_AARCH64_TLSLE_MOVW_TPREL_G1_NC, R_AARCH64_TLSLE_ADD_TPREL_HI12. (elf64_aarch64_tlsdesc_howto_table): Fix shift value for R_AARCH64_TLSDESC_LD64_PREL19 and R_AARCH64_TLSDESC_OFF_G1. (elf64_aarch64_final_link_relocate): Add signed_addend when resolving AARCH64_TLSLE_*_TPREL_* relocations. ld/testsuite/ * ld-aarch64/tlsle-symbol-offset.s: New file. * ld-aarch64/tlsle-symbol-offset.d: New file. * ld-aarch64/aarch64-elf.exp: Add tlsle-symbol-offset test.
This commit is contained in:
parent
448835468f
commit
bb3f9ed8ba
@ -1,3 +1,14 @@
|
||||
2012-10-16 Sofiane Naci <sofiane.naci@arm.com>
|
||||
|
||||
* elf64-aarch64.c (elf64_aarch64_tls_howto_table): Fix shift value for
|
||||
R_AARCH64_TLSIE_LD_GOTTPREL_PREL19, R_AARCH64_TLSLE_MOVW_TPREL_G2,
|
||||
R_AARCH64_TLSLE_MOVW_TPREL_G1, R_AARCH64_TLSLE_MOVW_TPREL_G1_NC,
|
||||
R_AARCH64_TLSLE_ADD_TPREL_HI12.
|
||||
(elf64_aarch64_tlsdesc_howto_table): Fix shift value for
|
||||
R_AARCH64_TLSDESC_LD64_PREL19 and R_AARCH64_TLSDESC_OFF_G1.
|
||||
(elf64_aarch64_final_link_relocate): Add signed_addend when resolving
|
||||
AARCH64_TLSLE_*_TPREL_* relocations.
|
||||
|
||||
2012-10-16 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* elf32-xtensa.c (free_section_cache): Renamed from
|
||||
|
@ -1076,7 +1076,7 @@ static reloc_howto_type elf64_aarch64_tls_howto_table[] =
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
HOWTO (R_AARCH64_TLSIE_LD_GOTTPREL_PREL19, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
21, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
@ -1090,7 +1090,7 @@ static reloc_howto_type elf64_aarch64_tls_howto_table[] =
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
HOWTO (R_AARCH64_TLSLE_MOVW_TPREL_G2, /* type */
|
||||
8, /* rightshift */
|
||||
32, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
12, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
@ -1104,7 +1104,7 @@ static reloc_howto_type elf64_aarch64_tls_howto_table[] =
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
HOWTO (R_AARCH64_TLSLE_MOVW_TPREL_G1, /* type */
|
||||
4, /* rightshift */
|
||||
16, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
12, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
@ -1118,7 +1118,7 @@ static reloc_howto_type elf64_aarch64_tls_howto_table[] =
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
HOWTO (R_AARCH64_TLSLE_MOVW_TPREL_G1_NC, /* type */
|
||||
4, /* rightshift */
|
||||
16, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
12, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
@ -1160,7 +1160,7 @@ static reloc_howto_type elf64_aarch64_tls_howto_table[] =
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
HOWTO (R_AARCH64_TLSLE_ADD_TPREL_HI12, /* type */
|
||||
3, /* rightshift */
|
||||
12, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
12, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
@ -1205,7 +1205,7 @@ static reloc_howto_type elf64_aarch64_tls_howto_table[] =
|
||||
static reloc_howto_type elf64_aarch64_tlsdesc_howto_table[] =
|
||||
{
|
||||
HOWTO (R_AARCH64_TLSDESC_LD64_PREL19, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
21, /* bitsize */
|
||||
TRUE, /* pc_relative */
|
||||
@ -1279,7 +1279,7 @@ static reloc_howto_type elf64_aarch64_tlsdesc_howto_table[] =
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
HOWTO (R_AARCH64_TLSDESC_OFF_G1, /* type */
|
||||
4, /* rightshift */
|
||||
16, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
12, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
@ -4054,7 +4054,7 @@ elf64_aarch64_final_link_relocate (reloc_howto_type *howto,
|
||||
case R_AARCH64_TLSLE_MOVW_TPREL_G1_NC:
|
||||
case R_AARCH64_TLSLE_MOVW_TPREL_G2:
|
||||
value = aarch64_resolve_relocation (r_type, place, value,
|
||||
- tpoff_base (info), weak_undef_p);
|
||||
signed_addend - tpoff_base (info), weak_undef_p);
|
||||
*unresolved_reloc_p = FALSE;
|
||||
break;
|
||||
|
||||
|
@ -1,3 +1,9 @@
|
||||
2012-10-16 Sofiane Naci <sofiane.naci@arm.com>
|
||||
|
||||
* ld-aarch64/tlsle-symbol-offset.s: New file.
|
||||
* ld-aarch64/tlsle-symbol-offset.d: New file.
|
||||
* ld-aarch64/aarch64-elf.exp: Add tlsle-symbol-offset test.
|
||||
|
||||
2012-10-08 Joe Seymour <jseymour@codesourcery.com>
|
||||
|
||||
* ld-scripts/sane1.d: Sort output from nm. Allow for other symbols in
|
||||
|
@ -108,3 +108,4 @@ run_dump_test "tls-relax-gdesc-ie-2"
|
||||
run_dump_test "tls-relax-gdesc-le-2"
|
||||
run_dump_test "tls-relax-ie-le-2"
|
||||
run_dump_test "tls-relax-ie-le-3"
|
||||
run_dump_test "tlsle-symbol-offset"
|
||||
|
11
ld/testsuite/ld-aarch64/tlsle-symbol-offset.d
Normal file
11
ld/testsuite/ld-aarch64/tlsle-symbol-offset.d
Normal file
@ -0,0 +1,11 @@
|
||||
#source: tlsle-symbol-offset.s
|
||||
#ld: -shared -T relocs.ld -e0
|
||||
#objdump: -dr
|
||||
#...
|
||||
Disassembly of section .text:
|
||||
|
||||
0000000000010000 <.text>:
|
||||
+10000: d53bd040 mrs x0, tpidr_el0
|
||||
+10004: 91400400 add x0, x0, #0x1, lsl #12
|
||||
+10008: 91010000 add x0, x0, #0x40
|
||||
+1000c: d65f03c0 ret
|
17
ld/testsuite/ld-aarch64/tlsle-symbol-offset.s
Normal file
17
ld/testsuite/ld-aarch64/tlsle-symbol-offset.s
Normal file
@ -0,0 +1,17 @@
|
||||
.global p
|
||||
.global a
|
||||
.section .tbss,"awT",%nobits
|
||||
p:
|
||||
.zero 4096
|
||||
a:
|
||||
.zero 52
|
||||
|
||||
.text
|
||||
|
||||
# Compute the address of an integer within structure a, padded
|
||||
# by an array of size 48
|
||||
|
||||
mrs x0, tpidr_el0
|
||||
add x0, x0, #:tprel_hi12:a+48
|
||||
add x0, x0, #:tprel_lo12_nc:a+48
|
||||
ret
|
Loading…
Reference in New Issue
Block a user