diff --git a/kernel/src/arch/x86_64/CPU.cpp b/kernel/src/arch/x86_64/CPU.cpp index afd2d4e8..2b9704e2 100644 --- a/kernel/src/arch/x86_64/CPU.cpp +++ b/kernel/src/arch/x86_64/CPU.cpp @@ -91,6 +91,9 @@ void handle_cpu_exception(int signo, const char* err, Registers* regs) auto* current = Scheduler::current(); if (current->check_stack_on_exception(regs->rsp)) return; + auto space = current->process->address_space.lock(); + (*space)->debug_log(); + current->send_signal(signo); current->process_pending_signals(regs); return; diff --git a/kernel/src/memory/AddressSpace.cpp b/kernel/src/memory/AddressSpace.cpp index 7aa0e717..1e7b0a30 100644 --- a/kernel/src/memory/AddressSpace.cpp +++ b/kernel/src/memory/AddressSpace.cpp @@ -1,4 +1,5 @@ #include "memory/AddressSpace.h" +#include "Log.h" #include "arch/MMU.h" #include "memory/Heap.h" #include "memory/MemoryManager.h" @@ -385,3 +386,13 @@ void VMRegion::sync_shared() } } } + +void AddressSpace::debug_log() +{ + m_regions.for_each([this](VMRegion* region) { + kdbgln("VMRegion start: %p, end: %p, count: %zu, used: %s, persistent: %s, flags: %d, prot: %d, shmid: %lu, " + "offset: %ld", + (void*)region->start, (void*)region->end, region->count, region->used ? "true" : "false", + region->persistent ? "true" : "false", region->flags, region->prot, region->shmid, region->offset); + }); +} diff --git a/kernel/src/memory/AddressSpace.h b/kernel/src/memory/AddressSpace.h index 2dfa8f2b..d9f6fe94 100644 --- a/kernel/src/memory/AddressSpace.h +++ b/kernel/src/memory/AddressSpace.h @@ -15,7 +15,7 @@ class VMRegion : LinkedListNode bool persistent { false }; int flags { 0 }; int prot { 0 }; - u64 shmid; + u64 shmid { 0 }; off_t offset { 0 }; void cleanup_shared(); @@ -52,6 +52,8 @@ class AddressSpace static Result> try_create(); + void debug_log(); + Result> clone(); PageDirectory* page_directory() const