mirror of
https://github.com/memtest86plus/memtest86plus.git
synced 2026-08-26 13:17:12 -05:00
Add .osrel section to the EFI binaries so that boot loaders that support the "Boot Loader Spec" can better deal with memtest86+ automatically. Fixes #265.
This commit is contained in:
+24
-2
@@ -43,6 +43,7 @@
|
||||
#include "boot.h"
|
||||
#include "build_version.h"
|
||||
#include "peimage.h"
|
||||
#include "build_version.h"
|
||||
|
||||
# The EFI loader loads the header at ImageBase, so we have to locate the main program
|
||||
# after that. This means we can't load the main program at HIGH_LOAD_ADDR. Pick a load
|
||||
@@ -805,7 +806,7 @@ coff_header:
|
||||
#else
|
||||
.word IMAGE_FILE_MACHINE_I386 # Machine (i386)
|
||||
#endif
|
||||
.word 3 # NumberOfSections
|
||||
.word 4 # NumberOfSections
|
||||
.long 0 # TimeDateStamp
|
||||
.long 0 # PointerToSymbolTable
|
||||
.long 0 # NumberOfSymbols
|
||||
@@ -833,7 +834,7 @@ optional_header:
|
||||
.byte 0x14 # MinorLinkerVersion
|
||||
|
||||
.long _virt_text_size # SizeOfCode
|
||||
.long _virt_sbat_size # SizeOfInitializedData
|
||||
.long _virt_osrel_size # SizeOfInitializedData
|
||||
.long 0 # SizeOfUninitializedData
|
||||
|
||||
.long _virt_text_start + 0x1e0 # AddressOfEntryPoint
|
||||
@@ -939,6 +940,20 @@ section_table:
|
||||
.long IMAGE_SCN_MEM_READ \
|
||||
| IMAGE_SCN_CNT_INITIALIZED_DATA # Characteristics (section flags)
|
||||
|
||||
.ascii ".osrel"
|
||||
.byte 0
|
||||
.byte 0
|
||||
.long _virt_osrel_size # VirtualSize
|
||||
.long _virt_osrel_start # VirtualAddress
|
||||
.long _file_osrel_size # SizeOfRawData
|
||||
.long _file_osrel_start # PointerToRawData
|
||||
.long 0 # PointerToRelocations
|
||||
.long 0 # PointerToLineNumbers
|
||||
.word 0 # NumberOfRelocations
|
||||
.word 0 # NumberOfLineNumbers
|
||||
.long IMAGE_SCN_MEM_READ \
|
||||
| IMAGE_SCN_CNT_INITIALIZED_DATA # Characteristics (section flags)
|
||||
|
||||
# Pad to the declared size.
|
||||
.org (SETUP_SECS*512)
|
||||
|
||||
@@ -949,3 +964,10 @@ section_table:
|
||||
|
||||
.section ".sbat", "a", @progbits
|
||||
.incbin "../boot/sbat.csv"
|
||||
|
||||
.section ".osrel", "a", @progbits
|
||||
.ascii "ID=memtest86plus\nNAME=\"memtest86+\"\nVERSION=\""
|
||||
.ascii MT_VERSION
|
||||
.ascii "."
|
||||
.asciz GIT_HASH
|
||||
.ascii "\""
|
||||
|
||||
@@ -33,16 +33,26 @@ SECTIONS {
|
||||
_file_sbat_end = . ;
|
||||
}
|
||||
.shstrtab : { *(.shstrtab) }
|
||||
.osrel : {
|
||||
_file_osrel_start = . ;
|
||||
*(.osrel)
|
||||
_real_osrel_end = . ;
|
||||
. = ALIGN(512);
|
||||
_file_osrel_end = . ;
|
||||
}
|
||||
|
||||
/DISCARD/ : { *(*) }
|
||||
|
||||
_real_text_size = _real_text_end - _file_text_start;
|
||||
_real_reloc_size = _real_reloc_end - _file_reloc_start;
|
||||
_real_sbat_size = _real_sbat_end - _file_sbat_start;
|
||||
_real_osrel_size = _real_osrel_end - _file_osrel_start;
|
||||
|
||||
_file_head_size = _file_text_start;
|
||||
_file_text_size = _file_text_end - _file_text_start;
|
||||
_file_reloc_size = _file_reloc_end - _file_reloc_start;
|
||||
_file_sbat_size = _file_sbat_end - _file_sbat_start;
|
||||
_file_osrel_size = _file_osrel_end - _file_osrel_start;
|
||||
|
||||
_sys_size = (_real_text_size + 15) >> 4;
|
||||
_init_size = _real_text_size + _bss_size;
|
||||
@@ -51,12 +61,14 @@ SECTIONS {
|
||||
_virt_text_size = ((_init_size + 4095) >> 12) << 12;
|
||||
_virt_reloc_size = ((_file_reloc_size + 4095) >> 12) << 12;
|
||||
_virt_sbat_size = ((_file_sbat_size + 4095) >> 12) << 12;
|
||||
_virt_osrel_size = ((_file_osrel_size + 4095) >> 12) << 12;
|
||||
|
||||
_virt_text_start = _virt_head_size;
|
||||
_virt_reloc_start = _virt_text_start + _virt_text_size;
|
||||
_virt_sbat_start = _virt_reloc_start + _virt_reloc_size;
|
||||
_virt_osrel_start = _virt_sbat_start + _virt_sbat_size;
|
||||
|
||||
_virt_img_size = _virt_sbat_start + _virt_sbat_size;
|
||||
_virt_img_size = _virt_osrel_start + _virt_osrel_size;
|
||||
|
||||
. = ASSERT(header == 0x202, "The setup header has the wrong offset!");
|
||||
. = ASSERT(_file_text_start == 0x1000, "The .text is at the wrong offset!");
|
||||
|
||||
@@ -33,16 +33,26 @@ SECTIONS {
|
||||
_file_sbat_end = . ;
|
||||
}
|
||||
.shstrtab : { *(.shstrtab) }
|
||||
.osrel : {
|
||||
_file_osrel_start = . ;
|
||||
*(.osrel)
|
||||
_real_osrel_end = . ;
|
||||
. = ALIGN(512);
|
||||
_file_osrel_end = . ;
|
||||
}
|
||||
|
||||
/DISCARD/ : { *(*) }
|
||||
|
||||
_real_text_size = _real_text_end - _file_text_start;
|
||||
_real_reloc_size = _real_reloc_end - _file_reloc_start;
|
||||
_real_sbat_size = _real_sbat_end - _file_sbat_start;
|
||||
_real_osrel_size = _real_osrel_end - _file_osrel_start;
|
||||
|
||||
_file_head_size = _file_text_start;
|
||||
_file_text_size = _file_text_end - _file_text_start;
|
||||
_file_reloc_size = _file_reloc_end - _file_reloc_start;
|
||||
_file_sbat_size = _file_sbat_end - _file_sbat_start;
|
||||
_file_osrel_size = _file_osrel_end - _file_osrel_start;
|
||||
|
||||
_sys_size = (_real_text_size + 15) >> 4;
|
||||
_init_size = _real_text_size + _bss_size;
|
||||
@@ -51,12 +61,14 @@ SECTIONS {
|
||||
_virt_text_size = ((_init_size + 4095) >> 12) << 12;
|
||||
_virt_reloc_size = ((_file_reloc_size + 4095) >> 12) << 12;
|
||||
_virt_sbat_size = ((_file_sbat_size + 4095) >> 12) << 12;
|
||||
_virt_osrel_size = ((_file_osrel_size + 4095) >> 12) << 12;
|
||||
|
||||
_virt_text_start = _virt_head_size;
|
||||
_virt_reloc_start = _virt_text_start + _virt_text_size;
|
||||
_virt_sbat_start = _virt_reloc_start + _virt_reloc_size;
|
||||
_virt_osrel_start = _virt_sbat_start + _virt_sbat_size;
|
||||
|
||||
_virt_img_size = _virt_sbat_start + _virt_sbat_size;
|
||||
_virt_img_size = _virt_osrel_start + _virt_osrel_size;
|
||||
|
||||
. = ASSERT(header == 0x202, "The setup header has the wrong offset!");
|
||||
. = ASSERT(_file_text_start == 0x1000, "The .text is at the wrong offset!");
|
||||
|
||||
Reference in New Issue
Block a user