[PATCH] D159082: [ELF][RISCV] Implement --emit-relocs with relaxation
Jessica Clarke via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Sat Sep 2 09:56:43 PDT 2023
jrtc27 added a comment.
In D159082#4636067 <https://reviews.llvm.org/D159082#4636067>, @jobnoorman wrote:
> In D159082#4635795 <https://reviews.llvm.org/D159082#4635795>, @MaskRay wrote:
>
>> GNU ld changes `R_RISCV_RELAX` to `R_RISCV_NONE`. I think keeping `R_RISCV_RELAX` is better. Projects depending on the relocation type should be aware.
>
> GNU ld seems to keep `R_RISCV_RELAX` but changes `R_RISCV_ALIGN` to `R_RISCV_NONE`:
>
> $ riscv64-linux-gnu-gcc -nostdlib -Wl,--emit-relocs,-Ttext=0x10000 lld/test/ELF/riscv-relax-emit-relocs.s
> $ riscv64-linux-gnu-objdump -dr a.out
>
> a.out: file format elf64-littleriscv
>
>
> Disassembly of section .text:
>
> 0000000000010000 <_start>:
> 10000: 008000ef jal ra,10008 <f>
> 10000: R_RISCV_JAL f
> 10000: R_RISCV_RELAX *ABS*
> 10004: 004000ef jal ra,10008 <f>
> 10004: R_RISCV_JAL f
> 10004: R_RISCV_RELAX *ABS*
>
> 0000000000010008 <f>:
> 10008: 8082 ret
> 10008: R_RISCV_NONE *ABS*+0x6
>
> I can see the logic of removing `R_RISCV_ALIGN` since it doesn't make too much sense anymore once the padding nops are removed. Do you think we should follow this behavior? The current version of the patch keeps it which at least allows analysis tools to recover the original alignment requirements.
They would be invalid though:
> The addend indicates the number of bytes occupied by nop instructions at the relocation offset. The alignment boundary is specified by the addend rounded up to the next power of two.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D159082/new/
https://reviews.llvm.org/D159082
More information about the llvm-commits
mailing list