
On 2/24/24 10:16, Heinrich Schuchardt wrote:
On 2/16/24 11:35, Ilias Apalodimas wrote:
Hi Heinrich,
[...]
} + .rela.dyn : { *(.rela.dyn) } + .rela.plt : { *(.rela.plt) } + .rela.got : { *(.rela.got) } + .rela.data : { *(.rela.data) *(.rela.data*) }
Why are we switching from Rel to Rela?
This was wrong.
Looking at the u-boot ELF binary we see these relocation sections:
arm: .rel.dyn arm64: .rela.dyn riscv64: .rela.dyn
In our EFI object files we currently have no relocations. This is why tests did not complain.
In arch/arm/lib/reloc_arm_efi.c we handle DT_REL. In arch/arm/lib/reloc_aarch64_efi.c we handle DT_RELA. In arch/riscv/lib/reloc_riscv_efi.c we handle DT_RELA.
To be truthful our generated binaries are only usable because we have no relocations.
If we had relocations, copying these to the .text or .data section would would not work. We would have to translate them to the relocation format of PE files and put them into the .reloc section like EDK II does in BaseTools/Source/C/GenFw/Elf32Convert.c.
Best regards
Heinrich
Best regards
Heinrich
_etext = .; _text_size = . - _text; - .dynamic : { *(.dynamic) } + . = ALIGN(4096); .data : { _data = .; *(.sdata) @@ -47,20 +59,19 @@ SECTIONS . = ALIGN(512); _bss_end = .; _edata = .; - } - .rel.dyn : { *(.rel.dyn) } - .rel.plt : { *(.rel.plt) } - .rel.got : { *(.rel.got) } - .rel.data : { *(.rel.data) *(.rel.data*) } - _data_size = . - _etext; + } :data + _data_size = _edata - _data;
+ . = ALIGN(4096); + .dynsym : { *(.dynsym) } + . = ALIGN(4096); + .dynstr : { *(.dynstr) } + . = ALIGN(4096); + .note.gnu.build-id : { *(.note.gnu.build-id) } /DISCARD/ : { *(.rel.reloc) *(.eh_frame) *(.note.GNU-stack) - *(.dynsym) - *(.dynstr) - *(.note.gnu.build-id) - *(.comment) } + .comment 0 : { *(.comment) } } -- 2.43.0
Cheers /Ilias