Risc - V failures inside ld-undefined
Clément Chigot
chigot@adacore.com
Fri Sep 30 12:29:36 GMT 2022
More information about the Binutils mailing list
Fri Sep 30 12:29:36 GMT 2022
- Previous message (by thread): [PATCH 0/4] RISC-V/gas: assorted adjustments
- Next message (by thread): Risc - V failures inside ld-undefined
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
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
- Previous message (by thread): [PATCH 0/4] RISC-V/gas: assorted adjustments
- Next message (by thread): Risc - V failures inside ld-undefined
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Binutils mailing list