https://sourceware.org/bugzilla/show_bug.cgi?id=33191
Bug ID: 33191 Summary: RISC-V relaxation affects unrelated symbol Product: binutils Version: unspecified Status: UNCONFIRMED Severity: normal Priority: P2 Component: ld Assignee: unassigned at sourceware dot org Reporter: luismarques at lowrisc dot org Target Milestone: --- For context, this bug is the binutils/ld counterpart of essentially the same LLD bug we filed earlier: https://github.com/llvm/llvm-project/issues/149583 In the following reproducer, the symbol x is being moved due to the call relaxation, when it arguably shouldn't be affected, as it's defined only relative to _start. $ cat bug.s .text .global _start _start: call _start .equ x, _start + 8 $ riscv64-linux-gnu-gcc -march=rv32i -mabi=ilp32 -mrelax -nostdlib -o bug bug.s && readelf -Ws bug Symbol table '.symtab' contains 25 entries: Num: Value Size Type Bind Vis Ndx Name 0: 00000000 0 NOTYPE LOCAL DEFAULT UND (...) 12: 000001bc 0 NOTYPE LOCAL DEFAULT 6 x (...) 19: 000001b8 0 NOTYPE GLOBAL DEFAULT 6 _start That is, we observe x = _start + 4 instead of _start + 8. For completeness, we have the following combinations of `x = _start + offset` requested offsets and generated offsets: | offset | LLD | Binutils | |--------|--------|----------| | -1 | -1 - 4 | -1 | | 0 | 0 | 0 | | 1 | 1 - 4 | 1 | | 4 | 4 - 4 | 4 | | 5 | 5 - 4 | 5 - 4 | | 8 | 8 - 4 | 8 - 4 | | 9 | 9 - 4 | 9 | -- You are receiving this mail because: You are on the CC list for the bug.