efi: Updates for new reduced-gnu-efi
diff --git a/common/GNUmakefile b/common/GNUmakefile
index 3d36a52f..351c54fb 100644
--- a/common/GNUmakefile
+++ b/common/GNUmakefile
@@ -279,7 +279,7 @@ ifeq ($(TARGET), uefi64)
$(call MKESCAPE,$(BUILDDIR))/full.map.o: $(call MKESCAPE,$(BUILDDIR))/limine_nomap.elf
cd '$(call SHESCAPE,$(BUILDDIR))' && \
- '$(call SHESCAPE,$(SRCDIR))/gensyms.sh' '$(call SHESCAPE,$<)' full 64 '\.sect'
+ '$(call SHESCAPE,$(SRCDIR))/gensyms.sh' '$(call SHESCAPE,$<)' full 64 '\.text'
$(call MKESCAPE,$(BUILDDIR))/BOOTX64.EFI: $(call MKESCAPE,$(BUILDDIR))/limine.elf
$(LIMINE_OBJCOPY) -O binary '$(call SHESCAPE,$<)' '$(call SHESCAPE,$@)'
@@ -326,7 +326,7 @@ ifeq ($(TARGET), uefi32)
$(call MKESCAPE,$(BUILDDIR))/full.map.o: $(call MKESCAPE,$(BUILDDIR))/limine_nomap.elf
cd '$(call SHESCAPE,$(BUILDDIR))' && \
- '$(call SHESCAPE,$(SRCDIR))/gensyms.sh' '$(call SHESCAPE,$<)' full 32 '\.sect'
+ '$(call SHESCAPE,$(SRCDIR))/gensyms.sh' '$(call SHESCAPE,$<)' full 32 '\.text'
$(call MKESCAPE,$(BUILDDIR))/BOOTIA32.EFI: $(call MKESCAPE,$(BUILDDIR))/limine.elf
$(LIMINE_OBJCOPY) -O binary '$(call SHESCAPE,$<)' '$(call SHESCAPE,$@)'
diff --git a/common/linker_uefi32.ld.in b/common/linker_uefi32.ld.in
index efb51fde..00bb5311 100644
--- a/common/linker_uefi32.ld.in
+++ b/common/linker_uefi32.ld.in
@@ -5,8 +5,9 @@ ENTRY(_start)
PHDRS
{
null PT_NULL FLAGS(0) ;
- segm PT_LOAD FLAGS(7) ;
- dynamic PT_DYNAMIC FLAGS(7) ;
+ text PT_LOAD FLAGS((1 << 0) | (1 << 2)) ;
+ data PT_LOAD FLAGS((1 << 1) | (1 << 2)) ;
+ dynamic PT_DYNAMIC FLAGS((1 << 1) | (1 << 2)) ;
}
SECTIONS
@@ -15,37 +16,39 @@ SECTIONS
__image_base = .;
__image_size = __image_end - __image_base;
- .sect : {
+ .text : {
*(.pe_header)
-
. = ALIGN(0x1000);
- __text_start = .;
- __text_size = __text_end - __text_start;
- __text_sizev = __text_endv - __text_start;
*(.text .text.*)
- __text_endv = .;
. = ALIGN(0x1000);
- __text_end = .;
+ } :text
+
+ __text_start = __image_base + 0x1000;
+ __text_size = SIZEOF(.text) - 0x1000;
+ __text_end = __text_start + __text_size;
- __reloc_start = .;
- __reloc_size = __reloc_end - __reloc_start;
- __reloc_sizev = __reloc_endv - __reloc_start;
- *(.reloc)
- __reloc_endv = .;
+ .data.sbat : {
+ *(.data.sbat)
. = ALIGN(0x1000);
- __reloc_end = .;
+ } :data
+
+ PROVIDE(__sbat_sizev = 1);
- __sbat_start = .;
- __sbat_size = __sbat_end - __sbat_start;
- __sbat_sizev = __sbat_endv - __sbat_start;
- *(.sbat)
- __sbat_endv = .;
+ __sbat_start = __text_end;
+ __sbat_size = SIZEOF(.data.sbat);
+ __sbat_end = __sbat_start + __sbat_size;
+
+ .data.reloc : {
+ *(.data.reloc)
. = ALIGN(0x1000);
- __sbat_end = .;
+ } :data
+
+ __reloc_start = __sbat_end;
+ __reloc_size = SIZEOF(.data.reloc);
+ __reloc_end = __reloc_start + __reloc_size;
- __data_start = .;
- __data_size = __data_end - __data_start;
+ .data : {
*(.rodata .rodata.*)
#ifdef LINKER_NOMAP
@@ -61,27 +64,26 @@ SECTIONS
*(.bss .bss.*)
*(COMMON)
data_end = .;
- . = ALIGN(0x1000);
- } :segm
+ } :data
.rel : {
*(.rel .rel.*)
- . = ALIGN(0x1000);
- } :segm
+ } :data
.got : {
*(.got .got.*)
- . = ALIGN(0x1000);
- } :segm
+ } :data
.dynamic : {
- __dynamic = .;
*(.dynamic)
. = ALIGN(0x1000);
- } :segm :dynamic
+ } :data :dynamic
+
+ __data_start = __reloc_end;
+ __data_size = SIZEOF(.data) + SIZEOF(.rel) + SIZEOF(.got) + SIZEOF(.dynamic);
+ __data_end = __data_start + __data_size;
- __data_end = .;
- __image_end = .;
+ __image_end = __data_end;
.symtab 0 : {
*(.symtab)
diff --git a/common/linker_uefi64.ld.in b/common/linker_uefi64.ld.in
index ee520dec..10110e3a 100644
--- a/common/linker_uefi64.ld.in
+++ b/common/linker_uefi64.ld.in
@@ -5,8 +5,9 @@ ENTRY(_start)
PHDRS
{
null PT_NULL FLAGS(0) ;
- segm PT_LOAD FLAGS(7) ;
- dynamic PT_DYNAMIC FLAGS(7) ;
+ text PT_LOAD FLAGS((1 << 0) | (1 << 2)) ;
+ data PT_LOAD FLAGS((1 << 1) | (1 << 2)) ;
+ dynamic PT_DYNAMIC FLAGS((1 << 1) | (1 << 2)) ;
}
SECTIONS
@@ -15,37 +16,39 @@ SECTIONS
__image_base = .;
__image_size = __image_end - __image_base;
- .sect : {
+ .text : {
*(.pe_header)
-
. = ALIGN(0x1000);
- __text_start = .;
- __text_size = __text_end - __text_start;
- __text_sizev = __text_endv - __text_start;
*(.text .text.*)
- __text_endv = .;
. = ALIGN(0x1000);
- __text_end = .;
+ } :text
+
+ __text_start = __image_base + 0x1000;
+ __text_size = SIZEOF(.text) - 0x1000;
+ __text_end = __text_start + __text_size;
- __reloc_start = .;
- __reloc_size = __reloc_end - __reloc_start;
- __reloc_sizev = __reloc_endv - __reloc_start;
- *(.reloc)
- __reloc_endv = .;
+ .data.sbat : {
+ *(.data.sbat)
. = ALIGN(0x1000);
- __reloc_end = .;
+ } :data
+
+ PROVIDE(__sbat_sizev = 1);
- __sbat_start = .;
- __sbat_size = __sbat_end - __sbat_start;
- __sbat_sizev = __sbat_endv - __sbat_start;
- *(.sbat)
- __sbat_endv = .;
+ __sbat_start = __text_end;
+ __sbat_size = SIZEOF(.data.sbat);
+ __sbat_end = __sbat_start + __sbat_size;
+
+ .data.reloc : {
+ *(.data.reloc)
. = ALIGN(0x1000);
- __sbat_end = .;
+ } :data
+
+ __reloc_start = __sbat_end;
+ __reloc_size = SIZEOF(.data.reloc);
+ __reloc_end = __reloc_start + __reloc_size;
- __data_start = .;
- __data_size = __data_end - __data_start;
+ .data : {
*(.rodata .rodata.*)
#ifdef LINKER_NOMAP
@@ -61,27 +64,26 @@ SECTIONS
*(.bss .bss.*)
*(COMMON)
data_end = .;
- . = ALIGN(0x1000);
- } :segm
+ } :data
.rela : {
*(.rela .rela.*)
- . = ALIGN(0x1000);
- } :segm
+ } :data
.got : {
*(.got .got.*)
- . = ALIGN(0x1000);
- } :segm
+ } :data
.dynamic : {
- __dynamic = .;
*(.dynamic)
. = ALIGN(0x1000);
- } :segm :dynamic
+ } :data :dynamic
+
+ __data_start = __reloc_end;
+ __data_size = SIZEOF(.data) + SIZEOF(.rela) + SIZEOF(.got) + SIZEOF(.dynamic);
+ __data_end = __data_start + __data_size;
- __data_end = .;
- __image_end = .;
+ __image_end = __data_end;
.symtab 0 : {
*(.symtab)
diff --git a/common/sbat.c b/common/sbat.c
index 6ae17180..dbe4e616 100644
--- a/common/sbat.c
+++ b/common/sbat.c
@@ -3,9 +3,13 @@
#include <config.h>
asm (
- ".section .sbat\n\t"
+ ".section .data.sbat\n\t"
+ "sbat:\n\t"
".ascii \"sbat,1,SBAT Version,sbat,1,https://github.com/rhboot/shim/blob/main/SBAT.md\\n\"\n\t"
".ascii \"limine,1,Limine,limine," LIMINE_VERSION ",https://limine-bootloader.org\\n\"\n\t"
+ "__sbat_endv:\n\t"
+ ".global __sbat_sizev\n\t"
+ ".set __sbat_sizev, __sbat_endv - sbat\n\t"
);
#endif
