mirror of
https://github.com/memtest86plus/memtest86plus.git
synced 2025-02-25 18:55:23 -06:00
EFI: Add a dummy relocation section
In the past, we've seen some problems with some EFI loaders refusing to load a binary that has both a .text section with the VMA set and no relocations, when the VMA set to load is already allocated for some other purpose. This patch adds a dummy absolute relocation from 0 to 0, so the loader can always feel like it has done something useful. Signed-off-by: Peter Jones <pjones@redhat.com>
This commit is contained in:
committed by
Sam Demeulemeester
parent
e022441544
commit
d1014365c1
@@ -90,7 +90,7 @@ coff_header:
|
|||||||
#else
|
#else
|
||||||
.word IMAGE_FILE_MACHINE_I386 # Machine (i386)
|
.word IMAGE_FILE_MACHINE_I386 # Machine (i386)
|
||||||
#endif
|
#endif
|
||||||
.word 1 # NumberOfSections
|
.word 2 # NumberOfSections
|
||||||
.long 0 # TimeDateStamp
|
.long 0 # TimeDateStamp
|
||||||
.long 0 # PointerToSymbolTable
|
.long 0 # PointerToSymbolTable
|
||||||
.long 0 # NumberOfSymbols
|
.long 0 # NumberOfSymbols
|
||||||
@@ -99,15 +99,13 @@ coff_header:
|
|||||||
.word IMAGE_FILE_DEBUG_STRIPPED \
|
.word IMAGE_FILE_DEBUG_STRIPPED \
|
||||||
| IMAGE_FILE_LOCAL_SYMS_STRIPPED\
|
| IMAGE_FILE_LOCAL_SYMS_STRIPPED\
|
||||||
| IMAGE_FILE_LINE_NUMS_STRIPPED \
|
| IMAGE_FILE_LINE_NUMS_STRIPPED \
|
||||||
| IMAGE_FILE_EXECUTABLE_IMAGE \
|
| IMAGE_FILE_EXECUTABLE_IMAGE # Characteristics
|
||||||
| IMAGE_FILE_RELOCS_STRIPPED # Characteristics
|
|
||||||
#else
|
#else
|
||||||
.word IMAGE_FILE_32BIT_MACHINE \
|
.word IMAGE_FILE_32BIT_MACHINE \
|
||||||
| IMAGE_FILE_DEBUG_STRIPPED \
|
| IMAGE_FILE_DEBUG_STRIPPED \
|
||||||
| IMAGE_FILE_LOCAL_SYMS_STRIPPED\
|
| IMAGE_FILE_LOCAL_SYMS_STRIPPED\
|
||||||
| IMAGE_FILE_LINE_NUMS_STRIPPED \
|
| IMAGE_FILE_LINE_NUMS_STRIPPED \
|
||||||
| IMAGE_FILE_EXECUTABLE_IMAGE \
|
| IMAGE_FILE_EXECUTABLE_IMAGE # Characteristics.
|
||||||
| IMAGE_FILE_RELOCS_STRIPPED # Characteristics.
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
optional_header:
|
optional_header:
|
||||||
@@ -175,8 +173,8 @@ extra_header_fields:
|
|||||||
.long 0 # DataDirectory.Exception.Size
|
.long 0 # DataDirectory.Exception.Size
|
||||||
.long 0 # DataDirectory.Certs.VirtualAddress
|
.long 0 # DataDirectory.Certs.VirtualAddress
|
||||||
.long 0 # DataDirectory.Certs.Size
|
.long 0 # DataDirectory.Certs.Size
|
||||||
.long 0 # DataDirectory.BaseReloc.VirtualAddress
|
.long _reloc_start # DataDirectory.BaseReloc.VirtualAddress
|
||||||
.long 0 # DataDirectory.BaseReloc.Size
|
.long _reloc_size # DataDirectory.BaseReloc.Size
|
||||||
|
|
||||||
# Section table
|
# Section table
|
||||||
section_table:
|
section_table:
|
||||||
@@ -197,6 +195,21 @@ section_table:
|
|||||||
| IMAGE_SCN_ALIGN_16BYTES \
|
| IMAGE_SCN_ALIGN_16BYTES \
|
||||||
| IMAGE_SCN_CNT_CODE # Characteristics (section flags)
|
| IMAGE_SCN_CNT_CODE # Characteristics (section flags)
|
||||||
|
|
||||||
|
.ascii ".reloc"
|
||||||
|
.byte 0
|
||||||
|
.byte 0
|
||||||
|
.long _reloc_size # VirtualSize
|
||||||
|
.long _reloc_start # VirtualAddress
|
||||||
|
.long _reloc_size # SizeOfRawData
|
||||||
|
.long _reloc_start # PointerToRawData
|
||||||
|
.long 0 # PointerToRelocations
|
||||||
|
.long 0 # PointerToLineNumbers
|
||||||
|
.word 0 # NumberOfRelocations
|
||||||
|
.word 0 # NumberOfLineNumbers
|
||||||
|
.long IMAGE_SCN_MEM_READ \
|
||||||
|
| IMAGE_SCN_ALIGN_4BYTES \
|
||||||
|
| IMAGE_SCN_CNT_INITIALIZED_DATA # Characteristics (section flags)
|
||||||
|
|
||||||
# Emulate the Linux boot header, to allow loading by intermediate boot loaders.
|
# Emulate the Linux boot header, to allow loading by intermediate boot loaders.
|
||||||
|
|
||||||
.org 497
|
.org 497
|
||||||
@@ -217,3 +230,8 @@ boot_flag:
|
|||||||
|
|
||||||
.org 512
|
.org 512
|
||||||
end_of_headers:
|
end_of_headers:
|
||||||
|
|
||||||
|
.section ".reloc", "a", @progbits
|
||||||
|
.long 0 // Page RVA
|
||||||
|
.long 10 // Block Size (2*4+2)
|
||||||
|
.word (IMAGE_REL_AMD64_ABSOLUTE<<12) + 0 // reloc 0 -> 0
|
||||||
|
|||||||
@@ -17,12 +17,19 @@ SECTIONS {
|
|||||||
. = ALIGN(512);
|
. = ALIGN(512);
|
||||||
_text_end = . ;
|
_text_end = . ;
|
||||||
}
|
}
|
||||||
|
. = ALIGN(512);
|
||||||
|
.reloc : {
|
||||||
|
_reloc_start = . ;
|
||||||
|
*(.reloc)
|
||||||
|
_reloc_end = . ;
|
||||||
|
}
|
||||||
. = ALIGN(4096);
|
. = ALIGN(4096);
|
||||||
_img_end = . ;
|
_img_end = . ;
|
||||||
/DISCARD/ : { *(*) }
|
/DISCARD/ : { *(*) }
|
||||||
|
|
||||||
_text_size = (_text_end - _text_start);
|
_text_size = (_text_end - _text_start);
|
||||||
|
|
||||||
|
_reloc_size = (_reloc_end - _reloc_start);
|
||||||
_sys_size = _text_size >> 4;
|
_sys_size = _text_size >> 4;
|
||||||
_init_size = _text_size + _bss_size;
|
_init_size = _text_size + _bss_size;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,12 +17,19 @@ SECTIONS {
|
|||||||
. = ALIGN(512);
|
. = ALIGN(512);
|
||||||
_text_end = . ;
|
_text_end = . ;
|
||||||
}
|
}
|
||||||
|
. = ALIGN(512);
|
||||||
|
.reloc : {
|
||||||
|
_reloc_start = . ;
|
||||||
|
*(.reloc)
|
||||||
|
_reloc_end = . ;
|
||||||
|
}
|
||||||
. = ALIGN(4096);
|
. = ALIGN(4096);
|
||||||
_img_end = . ;
|
_img_end = . ;
|
||||||
/DISCARD/ : { *(*) }
|
/DISCARD/ : { *(*) }
|
||||||
|
|
||||||
_text_size = (_text_end - _text_start);
|
_text_size = (_text_end - _text_start);
|
||||||
|
|
||||||
|
_reloc_size = (_reloc_end - _reloc_start);
|
||||||
_sys_size = _text_size >> 4;
|
_sys_size = _text_size >> 4;
|
||||||
_init_size = _text_size + _bss_size;
|
_init_size = _text_size + _bss_size;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user