feat: add initial impl of efi-stub and kernel
This commit is contained in:
86
arch/x86/boot/header.S
Normal file
86
arch/x86/boot/header.S
Normal file
@@ -0,0 +1,86 @@
|
||||
#include "format/pe.h"
|
||||
#include "offset.h"
|
||||
.set salign, 0x1000
|
||||
.set falign, 0x200
|
||||
.section ".bstext", "ax" // allocatable, executable
|
||||
.word IMAGE_DOS_SIGNATURE
|
||||
.org 0x3c
|
||||
.long pe_header
|
||||
.global pe_header
|
||||
pe_header:
|
||||
.long IMAGE_NT_SIGNATURE
|
||||
coff_header:
|
||||
.word IMAGE_FILE_MACHINE_AMD64
|
||||
.word section_count
|
||||
.long 0 /* TimeDateStamp */
|
||||
.long 0 /* PointerToSymbolTable */
|
||||
.long 0 /* NumberOfSymbols */
|
||||
.word section_table - optional_header /* SizeOfOptionalHeader */
|
||||
.word IMAGE_FILE_EXECUTABLE_IMAGE | IMAGE_FILE_DEBUG_STRIPPED | IMAGE_FILE_LINE_NUMS_STRIPPED /* Characteristics */
|
||||
optional_header:
|
||||
.word IMAGE_NT_OPTIONAL_HDR64_MAGIC /* Magic */
|
||||
.byte 0 /* MajorLinkerVersion */
|
||||
.byte 0 /* MinorLinkerVersion */
|
||||
.long CAP__data /* SizeOfCode */
|
||||
.long CAP__end - CAP__data /* SizeOfInitializedData */
|
||||
.long 0 /* SizeOfUninitializedData */
|
||||
.long setup_size + efi_pe_entry /* AddressOfEntryPoint */
|
||||
.long setup_size /* BaseOfCode */
|
||||
extra_header_fields:
|
||||
.quad 0 /* ImageBase */
|
||||
.long salign /* SectionAlignment */
|
||||
.long falign /* FileAlignment */
|
||||
.word 0 /* MajorOperatingSystemVersion */
|
||||
.word 0 /* MinorOperatingSystemVersion */
|
||||
.word 0 /* MajorImageVersion */
|
||||
.word 0 /* MinorImageVersion */
|
||||
.word 0 /* MajorSubsystemVersion */
|
||||
.word 0 /* MinorSubsystemVersion */
|
||||
.long 0 /* Win32VersionValue */
|
||||
|
||||
.long setup_size + CAP__end /* SizeOfImage */
|
||||
|
||||
.long salign /* SizeOfHeaders */
|
||||
.long 0 /* CheckSum */
|
||||
.word IMAGE_SUBSYSTEM_EFI_APPLICATION /* Subsystem */
|
||||
.word IMAGE_DLLCHARACTERISTICS_NX_COMPAT /* DllCharacteristics */
|
||||
.quad 0 /* SizeOfStackReserve */
|
||||
.quad 0 /* SizeOfStackCommit */
|
||||
.quad 0 /* SizeOfHeapReserve */
|
||||
.quad 0 /* SizeOfHeapCommit */
|
||||
.long 0 /* LoaderFlags */
|
||||
.long (section_table - .) / 8 /* NumberOfRvaAndSizes */
|
||||
.quad 0
|
||||
.quad 0
|
||||
.quad 0
|
||||
.quad 0
|
||||
.quad 0
|
||||
.quad 0
|
||||
|
||||
section_table:
|
||||
# .ascii ".setup\0\0"
|
||||
# .long setup_size - salign /* VirtualSize */
|
||||
# .long salign /* VirtualAddress */
|
||||
# .long setup_size - salign /* SizeOfRawData */
|
||||
# .long salign /* PointerToRawData */
|
||||
# .long 0,0,0
|
||||
# .long IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_DISCARDABLE
|
||||
|
||||
.ascii ".text\0\0\0"
|
||||
.long text_size /* VirtualSize */
|
||||
.long setup_size /* VirtualAddress */
|
||||
.long text_size /* SizeOfRawData */
|
||||
.long setup_size /* PointerToRawData */
|
||||
.long 0,0,0
|
||||
.long IMAGE_SCN_CNT_CODE | IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_EXECUTE
|
||||
|
||||
.ascii ".data\0\0\0"
|
||||
.long CAP__end - CAP__data /* VirtualSize */
|
||||
.long setup_size + CAP__data /* VirtualAddress */
|
||||
.long CAP__edata - CAP__data /* SizeOfRawData */
|
||||
.long setup_size + CAP__data /* PointerToRawData */
|
||||
.long 0,0,0
|
||||
.long IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_WRITE
|
||||
|
||||
.set text_size, CAP__data
|
||||
.set section_count, (. - section_table) / 40
|
||||
Reference in New Issue
Block a user