[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Bug ld/31848] New: aarch64: incorrect relative relocation for ABS symbo
From: |
nsz at gcc dot gnu.org |
Subject: |
[Bug ld/31848] New: aarch64: incorrect relative relocation for ABS symbols |
Date: |
Wed, 05 Jun 2024 13:48:46 +0000 |
https://sourceware.org/bugzilla/show_bug.cgi?id=31848
Bug ID: 31848
Summary: aarch64: incorrect relative relocation for ABS symbols
Product: binutils
Version: unspecified
Status: NEW
Severity: normal
Priority: P2
Component: ld
Assignee: unassigned at sourceware dot org
Reporter: nsz at gcc dot gnu.org
Target Milestone: ---
relative relocation against an abs symbol is wrong, the GOT entry should be
initialized to the abs symbol value without dynamic relocation for it.
$ cat abs-got.s
.text
.global _start
_start:
adrp x0, :got:sym_global_abs
ldr x0, [x0, :got_lo12:sym_global_abs]
adrp x0, :got:sym_weak_abs
ldr x0, [x0, :got_lo12:sym_weak_abs]
adrp x0, :got:sym_hidden_abs
ldr x0, [x0, :got_lo12:sym_hidden_abs]
adrp x0, :got:sym_forced_local_abs
ldr x0, [x0, :got_lo12:sym_forced_local_abs]
adrp x0, :got:sym_local_abs
ldr x0, [x0, :got_lo12:sym_local_abs]
.global sym_global_abs
.set sym_global_abs, 42
.weak sym_weak_abs
.set sym_weak_abs, 42
.global sym_hidden_abs
.hidden sym_hidden_abs
.set sym_hidden_abs, 42
.global sym_forced_local_abs
.set sym_forced_local_abs, 42
.set sym_local_abs, 42
$ cat abs-got.lds
{ local: sym_forced_local_abs; };
$ aarch64-linux-gnu-as -o abs-got.o abs-got.s
$ aarch64-linux-gnu-ld -pie --version-script=abs-got.lds abs-got.o
$ aarch64-linux-gnu-readelf -rW a.out
Relocation section '.rela.dyn' at offset 0x220 contains 5 entries:
Offset Info Type Symbol's Value
Symbol's Name + Addend
000000000001ffc0 0000000000000403 R_AARCH64_RELATIVE 2a
000000000001ffc8 0000000000000403 R_AARCH64_RELATIVE 2a
000000000001ffd0 0000000000000403 R_AARCH64_RELATIVE 2a
000000000001ffd8 0000000000000403 R_AARCH64_RELATIVE 2a
000000000001ffe0 0000000000000403 R_AARCH64_RELATIVE 2a
$ aarch64-linux-gnu-readelf -sW a.out |grep sym_
13: 000000000000002a 0 NOTYPE LOCAL DEFAULT ABS sym_local_abs
16: 000000000000002a 0 NOTYPE LOCAL DEFAULT ABS sym_forced_local_abs
18: 000000000000002a 0 NOTYPE GLOBAL HIDDEN ABS sym_hidden_abs
24: 000000000000002a 0 NOTYPE GLOBAL DEFAULT ABS sym_global_abs
28: 000000000000002a 0 NOTYPE WEAK DEFAULT ABS sym_weak_abs
$ aarch64-linux-gnu-ld -z pack-relative-relocs -pie
--version-script=abs-got.lds abs-got.o
$ aarch64-linux-gnu-readelf -rW a.out
Relocation section '.rela.dyn' at offset 0x220 contains 4 entries:
Offset Info Type Symbol's Value
Symbol's Name + Addend
0000000000000000 0000000000000000 R_AARCH64_NONE 0
0000000000000000 0000000000000000 R_AARCH64_NONE 0
0000000000000000 0000000000000000 R_AARCH64_NONE 0
0000000000000000 0000000000000000 R_AARCH64_NONE 0
Relocation section '.relr.dyn' at offset 0x280 contains 1 entry which relocates
1 location:
Index: Entry Address Symbolic Address
0000: 000000000001ffc0 000000000001ffc0 _GLOBAL_OFFSET_TABLE_ + 0x8
--
You are receiving this mail because:
You are on the CC list for the bug.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Bug ld/31848] New: aarch64: incorrect relative relocation for ABS symbols,
nsz at gcc dot gnu.org <=