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


Reply via email to