we load the ELF correctly it seems!

This commit is contained in:
2026-05-11 23:44:19 +02:00
parent 831e03e868
commit 93cab1ee41
11 changed files with 188 additions and 93 deletions
+25 -8
View File
@@ -1,11 +1,19 @@
#include <print>
#include <elfio/elfio.hpp>
#include <cflags.hpp>
#include <ircolib/mem_access.hpp>
#include "mem.hpp"
int main(int argc, char **argv) {
ELFIO::elfio reader;
if (!reader.load("tests/application/application.elf"))
return 1;
weee::core::mem mem;
cflags::cflags flags;
flags.add_string_callback('\0', "elf", [&](const std::string &v) { reader.load(v); }, "ELF binary to load");
if (!flags.parse(argc, argv))
return -1;
size_t sanity_bss_check_count = 0;
@@ -17,12 +25,6 @@ int main(int argc, char **argv) {
if (segment->get_memory_size() == 0)
continue;
if (segment->get_file_size() == 0) {
sanity_bss_check_count++;
if (sanity_bss_check_count > 1)
std::println("weee does not support multiple .bss segments");
}
const bool exc = segment->get_flags() & ELFIO::PF_X;
const bool rd = segment->get_flags() & ELFIO::PF_R;
const bool wr = segment->get_flags() & ELFIO::PF_W;
@@ -30,6 +32,21 @@ int main(int argc, char **argv) {
std::println("Segment {} {}{}{} @ 0x{:08X} -> 0x{:08X}", segment->get_index(), rd ? 'R' : '_', wr ? 'W' : '_',
exc ? 'X' : '_', segment->get_virtual_address(),
segment->get_virtual_address() + segment->get_memory_size() - 1);
if (segment->get_file_size() == 0) {
sanity_bss_check_count++;
if (sanity_bss_check_count > 1) {
std::println("weee does not support multiple .bss segments");
return -2;
}
// .bss we zero out
mem.set(0, segment->get_memory_size(), segment->get_virtual_address() & 0x0FFFFFFF);
continue;
}
mem.copy((const ircolib::u8 *)segment->get_data(), segment->get_file_size(),
segment->get_virtual_address() & 0x0FFFFFFF);
}
return 0;