Files
YukiOS/arch/x86/boot/header.S

86 lines
3.6 KiB
ArmAsm

#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