[PATCH 1/1] efi_loader: fix .reloc section of arm64
Heinrich Schuchardt
heinrich.schuchardt at canonical.com
Sun Jan 8 15:19:39 CET 2023
When adding
const unsigned short *menu_items[] = {
u"abc\n",
u"def\n",
NULL
};
to helloworld.c outside of a function and then referring to the variable
in a function the pointer the reference is incorrect. This is due to not
considering the generated relocations.
Fix the linker script and the PE-COFF header.
Fixes: c65d76ed5f81 ("efi: arm: Add aarch64 EFI app support")
Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt at canonical.com>
---
arch/arm/lib/crt0_aarch64_efi.S | 32 ++++++++++++++++----------------
arch/arm/lib/elf_aarch64_efi.lds | 11 +++++++----
2 files changed, 23 insertions(+), 20 deletions(-)
diff --git a/arch/arm/lib/crt0_aarch64_efi.S b/arch/arm/lib/crt0_aarch64_efi.S
index 3c2cef6ec7..3520182217 100644
--- a/arch/arm/lib/crt0_aarch64_efi.S
+++ b/arch/arm/lib/crt0_aarch64_efi.S
@@ -89,22 +89,6 @@ section_table:
* because EFI applications must be relocatable. This is a
* dummy section as far as we are concerned.
*/
- .ascii ".reloc"
- .byte 0
- .byte 0 /* end of 0 padding of section name */
- .long 0
- .long 0
- .long 0 /* SizeOfRawData */
- .long 0 /* PointerToRawData */
- .long 0 /* PointerToRelocations */
- .long 0 /* PointerToLineNumbers */
- .short 0 /* NumberOfRelocations */
- .short 0 /* NumberOfLineNumbers */
- /* Characteristics (section flags) */
- .long (IMAGE_SCN_MEM_READ | \
- IMAGE_SCN_MEM_DISCARDABLE | \
- IMAGE_SCN_CNT_INITIALIZED_DATA)
-
.ascii ".text"
.byte 0
.byte 0
@@ -139,6 +123,22 @@ section_table:
IMAGE_SCN_MEM_READ | \
IMAGE_SCN_CNT_INITIALIZED_DATA)
+ .ascii ".reloc"
+ .byte 0
+ .byte 0 /* end of 0 padding of section name */
+ .long _relo_size /* VirtualSize */
+ .long _relo - ImageBase /* VirtualAddress */
+ .long _relo_size /* SizeOfRawData */
+ .long _relo - ImageBase /* PointerToRawData */
+ .long 0 /* PointerToRelocations */
+ .long 0 /* PointerToLineNumbers */
+ .short 0 /* NumberOfRelocations */
+ .short 0 /* NumberOfLineNumbers */
+ /* Characteristics (section flags) */
+ .long (IMAGE_SCN_MEM_READ | \
+ IMAGE_SCN_MEM_DISCARDABLE | \
+ IMAGE_SCN_CNT_INITIALIZED_DATA)
+
.align 12
_start:
stp x29, x30, [sp, #-32]!
diff --git a/arch/arm/lib/elf_aarch64_efi.lds b/arch/arm/lib/elf_aarch64_efi.lds
index 3e3da47d6a..1ec2e7fec8 100644
--- a/arch/arm/lib/elf_aarch64_efi.lds
+++ b/arch/arm/lib/elf_aarch64_efi.lds
@@ -57,10 +57,13 @@ SECTIONS
_edata = .;
} :data
_data_size = _edata - _data;
- .rela.dyn : { *(.rela.dyn) }
- .rela.plt : { *(.rela.plt) }
- .rela.got : { *(.rela.got) }
- .rela.data : { *(.rela.data) *(.rela.data*) }
+ . = ALIGN(4096);
+ .reloc : {
+ _relo = .;
+ *(.rela*)
+ _erelo = .;
+ }
+ _relo_size = _erelo - _relo;
. = ALIGN(4096);
.dynsym : { *(.dynsym) }
--
2.37.2
More information about the U-Boot
mailing list