Add .osrel section to the binary (#617)

Closes #265
This commit is contained in:
Sam Demeulemeester authored and GitHub committed 2026-05-25 20:58:41 +02:00
1 parent badcf8a57c
commit dae548f804
5 files changed
+83 -9

No files matched your search

+22 -1
View File
@@ -10,6 +10,7 @@
#define __ASSEMBLY__
#include "boot.h"
#include "build_version.h"
#include "peimage.h"
# The EFI loader loads the header at ImageBase, so we have to locate the main program
@@ -36,7 +37,7 @@ pe_header:
coff_header:
.short IMAGE_FILE_MACHINE_LOONGARCH64 # Machine (LoongArch64)
.short 4 # NumberOfSections
.short 5 # NumberOfSections
.long 0 # TimeDateStamp
.long 0 # PointerToSymbolTable
.long 0 # NumberOfSymbols
@@ -159,6 +160,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
.short 0 # NumberOfRelocations
.short 0 # NumberOfLineNumbers
.long IMAGE_SCN_MEM_READ \
| IMAGE_SCN_CNT_INITIALIZED_DATA # Characteristics (section flags)
.org 512
.section ".reloc"
@@ -168,3 +183,9 @@ section_table:
.section ".sbat", "a", @progbits
.incbin "../boot/sbat.csv"
.section ".osrel", "a", @progbits
.ascii "ID=memtest86plus\n"
.ascii "NAME=\"Memtest86+\"\n"
.ascii "VERSION_ID=\"" , MT_VERSION , "\"\n"
.ascii "PRETTY_NAME=\"Memtest86+ v" , MT_VERSION , "\"\n"
+21 -1
View File
@@ -805,7 +805,7 @@ coff_header:
#else
.word IMAGE_FILE_MACHINE_I386 # Machine (i386)
#endif
.word 4 # NumberOfSections
.word 5 # NumberOfSections
.long 0 # TimeDateStamp
.long 0 # PointerToSymbolTable
.long 0 # NumberOfSymbols
@@ -954,6 +954,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)
@@ -964,3 +978,9 @@ section_table:
.section ".sbat", "a", @progbits
.incbin "../boot/sbat.csv"
.section ".osrel", "a", @progbits
.ascii "ID=memtest86plus\n"
.ascii "NAME=\"Memtest86+\"\n"
.ascii "VERSION_ID=\"" , MT_VERSION , "\"\n"
.ascii "PRETTY_NAME=\"Memtest86+ v" , MT_VERSION , "\"\n"
+13 -2
View File
@@ -39,6 +39,13 @@ SECTIONS {
. = ALIGN(512);
_file_sbat_end = . ;
}
.osrel : {
_file_osrel_start = . ;
*(.osrel)
_real_osrel_end = . ;
. = ALIGN(512);
_file_osrel_end = . ;
}
.shstrtab : { *(.shstrtab) }
/DISCARD/ : { *(*) }
@@ -46,12 +53,14 @@ SECTIONS {
_real_data_size = _real_data_end - _file_data_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_data_size = _file_data_end - _file_data_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 + _real_data_size + 15) >> 4;
_init_size = _real_text_size + _real_data_size + _bss_size;
@@ -61,15 +70,17 @@ SECTIONS {
_virt_data_size = ((_real_data_size + _bss_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_data_start = _virt_text_start + _virt_text_size;
_virt_reloc_start = _virt_data_start + _virt_data_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;
_virt_init_size = _virt_data_size + _virt_reloc_size + _virt_sbat_size;
_virt_init_size = _virt_data_size + _virt_reloc_size + _virt_sbat_size + _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!");
+13 -2
View File
@@ -36,6 +36,13 @@ SECTIONS {
. = ALIGN(512);
_file_sbat_end = . ;
}
.osrel : {
_file_osrel_start = . ;
*(.osrel)
_real_osrel_end = . ;
. = ALIGN(512);
_file_osrel_end = . ;
}
.shstrtab : { *(.shstrtab) }
/DISCARD/ : { *(*) }
@@ -43,12 +50,14 @@ SECTIONS {
_real_data_size = _real_data_end - _file_data_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_data_size = _file_data_end - _file_data_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 + _real_data_size + 15) >> 4;
_init_size = _real_text_size + _real_data_size + _bss_size;
@@ -58,13 +67,15 @@ SECTIONS {
_virt_data_size = ((_real_data_size + _bss_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_data_start = _virt_text_start + _virt_text_size;
_virt_reloc_start = _virt_data_start + _virt_data_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;
_virt_init_size = _virt_data_size + _virt_reloc_size + _virt_sbat_size;
_virt_init_size = _virt_data_size + _virt_reloc_size + _virt_sbat_size + _virt_osrel_size;
}
+14 -3
View File
@@ -39,6 +39,13 @@ SECTIONS {
. = ALIGN(512);
_file_sbat_end = . ;
}
.osrel : {
_file_osrel_start = . ;
*(.osrel)
_real_osrel_end = . ;
. = ALIGN(512);
_file_osrel_end = . ;
}
.shstrtab : { *(.shstrtab) }
/DISCARD/ : { *(*) }
@@ -46,12 +53,14 @@ SECTIONS {
_real_data_size = _real_data_end - _file_data_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_data_size = _file_data_end - _file_data_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 + _real_data_size + 15) >> 4;
_init_size = _real_text_size + _real_data_size + _bss_size;
@@ -60,16 +69,18 @@ SECTIONS {
_virt_text_size = ((_real_text_size + 4095) >> 12) << 12;
_virt_data_size = ((_real_data_size + _bss_size + 4095) >> 12) << 12;
_virt_reloc_size = ((_file_reloc_size + 4095) >> 12) << 12;
_virt_sbat_size = _real_sbat_size;
_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_data_start = _virt_text_start + _virt_text_size;
_virt_reloc_start = _virt_data_start + _virt_data_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 + 4095) >> 12) << 12;
_virt_img_size = ((_virt_osrel_start + _virt_osrel_size + 4095) >> 12) << 12;
_virt_init_size = _virt_data_size + _virt_reloc_size + _virt_sbat_size;
_virt_init_size = _virt_data_size + _virt_reloc_size + _virt_sbat_size + _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!");