From 5257ff662fc802d7017459e75fdd2fba41bb3546 Mon Sep 17 00:00:00 2001 From: Alex Date: Tue, 14 Feb 2023 03:53:09 +0200 Subject: [PATCH] Debug what destructors are called --- Core/Crash/CrashHandler.cpp | 6 +++--- Core/Disk.cpp | 1 + Core/Driver/Driver.cpp | 2 ++ Core/Power.cpp | 1 + Core/Timer.cpp | 1 + Core/Video/Display.cpp | 8 ++++++-- FileSystem/Filesystem.cpp | 2 +- KThread.cpp | 2 +- Kernel.cpp | 8 ++------ Network/NetworkController.cpp | 2 ++ Recovery/RecoveryMain.cpp | 3 ++- 11 files changed, 22 insertions(+), 14 deletions(-) diff --git a/Core/Crash/CrashHandler.cpp b/Core/Crash/CrashHandler.cpp index 849d5b0..870b75e 100644 --- a/Core/Crash/CrashHandler.cpp +++ b/Core/Crash/CrashHandler.cpp @@ -663,14 +663,14 @@ namespace CrashHandler if (Frame->cs != GDT_USER_CODE && Frame->cs != GDT_USER_DATA) { - debug("Exception in kernel mode (ip: %#lx, cr2: %#lx)", Frame->rip, PageFaultAddress); + debug("Exception in kernel mode (ip: %#lx (%s), cr2: %#lx)", Frame->rip, KernelSymbolTable ? KernelSymbolTable->GetSymbolFromAddress(Frame->rip) : "No symbol", PageFaultAddress); if (TaskManager) TaskManager->Panic(); Display->CreateBuffer(0, 0, SBIdx); } else { - debug("Exception in user mode (ip: %#lx, cr2: %#lx)", Frame->rip, PageFaultAddress); + debug("Exception in user mode (ip: %#lx (%s), cr2: %#lx)", Frame->rip, KernelSymbolTable ? KernelSymbolTable->GetSymbolFromAddress(Frame->rip) : "No symbol", PageFaultAddress); CPUData *data = GetCurrentCPU(); if (!data) { @@ -715,7 +715,7 @@ namespace CrashHandler asmv("mov %%ds, %0" : "=r"(ds)); - EHPrint("\eFF0000FS=%#llx GS=%#llx SS=%#llx CS=%#llx DS=%#llx\n", + EHPrint("\eFF2525FS=%#llx GS=%#llx SS=%#llx CS=%#llx DS=%#llx\n", CPU::x64::rdmsr(CPU::x64::MSR_FS_BASE), CPU::x64::rdmsr(CPU::x64::MSR_GS_BASE), Frame->ss, Frame->cs, ds); EHPrint("R8=%#llx R9=%#llx R10=%#llx R11=%#llx\n", Frame->r8, Frame->r9, Frame->r10, Frame->r11); diff --git a/Core/Disk.cpp b/Core/Disk.cpp index 8bc4257..2442f95 100644 --- a/Core/Disk.cpp +++ b/Core/Disk.cpp @@ -153,5 +153,6 @@ namespace Disk Manager::~Manager() { + debug("Destructor called"); } } diff --git a/Core/Driver/Driver.cpp b/Core/Driver/Driver.cpp index 131303b..3771325 100644 --- a/Core/Driver/Driver.cpp +++ b/Core/Driver/Driver.cpp @@ -202,6 +202,8 @@ namespace Driver Driver::~Driver() { + debug("Destructor called"); + this->UnloadAllDrivers(); } #if defined(__amd64__) diff --git a/Core/Power.cpp b/Core/Power.cpp index 96a5721..25f7137 100644 --- a/Core/Power.cpp +++ b/Core/Power.cpp @@ -71,6 +71,7 @@ namespace Power Power::~Power() { + debug("Destructor called"); } } diff --git a/Core/Timer.cpp b/Core/Timer.cpp index 0d91b6e..bf8a6a8 100644 --- a/Core/Timer.cpp +++ b/Core/Timer.cpp @@ -79,5 +79,6 @@ namespace Time time::~time() { + debug("Destructor called"); } } diff --git a/Core/Video/Display.cpp b/Core/Video/Display.cpp index e1c4049..5302ec8 100644 --- a/Core/Video/Display.cpp +++ b/Core/Video/Display.cpp @@ -311,7 +311,11 @@ namespace Video Display::~Display() { - for (int i = 0; i < 16; i++) - DeleteBuffer(i); + debug("Destructor called"); + this->ClearBuffer(0); + this->SetBuffer(0); + + for (size_t i = 0; i < sizeof(this->Buffers) / sizeof(this->Buffers[0]); i++) + this->DeleteBuffer(i); } } diff --git a/FileSystem/Filesystem.cpp b/FileSystem/Filesystem.cpp index f630b63..6abcfce 100644 --- a/FileSystem/Filesystem.cpp +++ b/FileSystem/Filesystem.cpp @@ -621,6 +621,6 @@ namespace VirtualFileSystem Virtual::~Virtual() { - trace("Destroying virtual file system..."); + debug("Destructor called"); } } diff --git a/KThread.cpp b/KThread.cpp index 3358a08..b4004e1 100644 --- a/KThread.cpp +++ b/KThread.cpp @@ -217,7 +217,7 @@ Exit: if (ExitCode != 0) { KPrint("Dropping to recovery screen...", ExitCode); - TaskManager->Sleep(5000); + TaskManager->Sleep(2500); RecoveryScreen = new Recovery::KernelRecovery; } else diff --git a/Kernel.cpp b/Kernel.cpp index 2ecbe45..aad314b 100644 --- a/Kernel.cpp +++ b/Kernel.cpp @@ -356,17 +356,13 @@ EXTERNC __no_stack_protector __no_instrument_function void BeforeShutdown() delete NIManager; delete DiskManager; - if (DriverManager) - DriverManager->UnloadAllDrivers(); delete DriverManager; - TaskManager->SignalShutdown(); delete TaskManager; - - delete RecoveryScreen; + if (RecoveryScreen) + delete RecoveryScreen; delete vfs; delete TimeManager; - delete KernelSymbolTable; delete Display; // PowerManager should not be called diff --git a/Network/NetworkController.cpp b/Network/NetworkController.cpp index e70240a..5024ccd 100644 --- a/Network/NetworkController.cpp +++ b/Network/NetworkController.cpp @@ -34,6 +34,8 @@ namespace NetworkInterfaceManager NetworkInterface::~NetworkInterface() { + debug("Destructor called"); + // Stop the network stack this->StopNetworkStack(); diff --git a/Recovery/RecoveryMain.cpp b/Recovery/RecoveryMain.cpp index 83d1d7e..fe0aeed 100644 --- a/Recovery/RecoveryMain.cpp +++ b/Recovery/RecoveryMain.cpp @@ -33,7 +33,7 @@ namespace Recovery gui = new GraphicalUserInterface::GUI; - // TaskManager->CreateThread(proc, (IP)RecoveryThreadWrapper, nullptr, nullptr, auxv); + // TaskManager->CreateThread(TaskManager->GetCurrentProcess(), (IP)RecoveryThreadWrapper); TCB *guiThread = TaskManager->CreateThread(TaskManager->GetCurrentProcess(), (IP)GUIWrapper); guiThread->Rename("GUI Thread"); guiThread->SetPriority(Tasking::TaskPriority::Critical); @@ -57,6 +57,7 @@ namespace Recovery KernelRecovery::~KernelRecovery() { + debug("Destructor called"); delete gui; } }