From b4f13d694f33e321878bbcdff4da61484d3e4501 Mon Sep 17 00:00:00 2001 From: "Justin C. Miller" Date: Fri, 16 Sep 2022 19:35:36 -0700 Subject: [PATCH] [kernel] Make lld output SysV ABI ELF binaries lld started creating ELF files with OSABI set to GNU instead of SysV. Make sure to pass the option to tell lld we want plain SysV binaries. Also, some debug output in boot if verification fails in ELF loading. --- configs/kernel-debug.yaml | 1 + src/boot/loader.cpp | 13 ++++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/configs/kernel-debug.yaml b/configs/kernel-debug.yaml index 0c0fa19..77fd39f 100644 --- a/configs/kernel-debug.yaml +++ b/configs/kernel-debug.yaml @@ -47,6 +47,7 @@ variables: ldflags: [ "-g", + "-m", "elf_x86_64", "-nostdlib", "-Bstatic", "--no-eh-frame-hdr", diff --git a/src/boot/loader.cpp b/src/boot/loader.cpp index 27b9995..da1fa35 100644 --- a/src/boot/loader.cpp +++ b/src/boot/loader.cpp @@ -72,8 +72,19 @@ load_program( create_module(data, desc, true); elf::file program(data.pointer, data.count); - if (!program.valid()) + if (!program.valid()) { + auto *header = program.header(); + console::print(L" progam size: %d\r\n", data.count); + console::print(L" word size: %d\r\n", header->word_size); + console::print(L" endianness: %d\r\n", header->endianness); + console::print(L" ELF ident version: %d\r\n", header->ident_version); + console::print(L" OS ABI: %d\r\n", header->os_abi); + console::print(L" file type: %d\r\n", header->file_type); + console::print(L" machine type: %d\r\n", header->machine_type); + console::print(L" ELF version: %d\r\n", header->version); + error::raise(uefi::status::load_error, L"ELF file not valid"); + } size_t num_sections = 0; for (auto &seg : program.programs()) {