[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