Re: [PATCH] efi/libstub/arm64: Enable __efistub_global define in .data section

From: Victor Erminpour
Date: Fri Apr 10 2020 - 18:13:08 EST




On 4/10/20 1:09 AM, Ard Biesheuvel wrote:
On Thu, 9 Apr 2020 at 23:44, Victor Erminpour
<victor.erminpour@xxxxxxxxxx> wrote:

Enable the __efistub_global define to place variables in the
.data section for both CONFIG_ARM and CONFIG_ARM64.

This places the EFIstub sys_table variable and other EFIstub
static variables in the .data section for both CONFIG_ARM and
CONFIG_ARM64.


What does that achieve?

Hi Ard,

Without placing these global variables in .data, I get the
following errors when booting an ARM64 EFI system:

EFI stub: ERROR: Exit boot services failed.
EFI stub: ERROR: Failed to update FDT and exit boot services


I know that the ARM64 linker script is supposed to put the
.init.bss into the .init.data section, but I don't think this
is happening for all systems.

Having it explicitly enabled for CONFIG_ARM64 worked for me.


Regards,
--Victor



Signed-off-by: Victor Erminpour <victor.erminpour@xxxxxxxxxx>
---
drivers/firmware/efi/libstub/efistub.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/firmware/efi/libstub/efistub.h b/drivers/firmware/efi/libstub/efistub.h
index c244b16..59932d6 100644
--- a/drivers/firmware/efi/libstub/efistub.h
+++ b/drivers/firmware/efi/libstub/efistub.h
@@ -25,7 +25,7 @@
#define EFI_ALLOC_ALIGN EFI_PAGE_SIZE
#endif

-#ifdef CONFIG_ARM
+#if defined(CONFIG_ARM) || defined(CONFIG_ARM64)
#define __efistub_global __section(.data)
#else
#define __efistub_global

--
Victor Hugo Erminpour
Principal Member of Technical Staff
Oracle America