Risc - V failures inside ld-undefined
Clément Chigot
chigot@adacore.com
Fri Sep 30 12:29:36 GMT 2022
Hi all,
I've been running the ld testsuite for Risc-V targets using a cross
compiler and I'm seeing some failures in "undefined".
PASS: undefined
FAIL: undefined function
FAIL: undefined line
As I'm using a custom gcc, I just want confirmation from the Risc-V
maintainers that these two tests are either failing or being skipped
on their side.
I've a patch fixing the testsuite for cross-compiler which might
explain why it has always been skipped until now and why this error
has been masked.
Note that I've investigated a bit and it seems to be related to
R_RISCV_ALIGN and the associated linker relaxation.
Instead of showing
| ld: tmpdir/undefined.o: in function `function':
| .../undefined.c:9: undefined reference to `this_function_is_not_defined'
the error is:
| riscv64-elf-ld: tmpdir/undefined.o: in function `.Ltext0':
| undefined.c:(.text+0x0): undefined reference to
`this_function_is_not_defined'
The idea is that "function" has an alignment of 2 and thus gas will
add NOP instructions and a R_RISCV_ALIGN relocation before it (within
tc-riscv.c:riscv_frag_align_code).
| $ riscv64-elf-objdump -D tmpdir/undefined.o
| 0000000000000000 <.Ltext0>:
| 0: 0001 nop
|
| 0000000000000002 <function>:
| 2: 00000317 auipc t1,0x0
| 6: 00030067 jr t1 # 2 <function>
When the linker will relax these NOPs (in
elfnn-riscv.c:riscv_relax_delete_bytes), it will correctly change the
relocation offset but not the DWARF information. Thus, when the error
is trying to get the nearest line using _bfd_dwarf2_find_nearest_line,
it ends up using a modified offset with non-modified DWARF information
and targets the wrong symbol.
I guess riscv_relax_delete_bytes can be improved to adjust the DWARF
part too. But I'm not familiar with this part of bfd and I'm not sure
it's even possible.
Otherwise, I guess XFAIL these tests should be fine as they are
similar to other XFAILs related to DWARF-2 (on arm-elf). Even if not
having a "function" being shown in the error might be problematic.
Anyway, the fact that I'm using a custom gcc shouldn't matter here but
I want to confirm that first.
Thanks,
Clément
More information about the Binutils
mailing list