Wrote stack unwinder. NEEDTO: fix NoUnwindInfo

Probably incorrect PC was set.
This commit is contained in:
2025-03-05 22:21:38 +00:00
parent 8ee4af1a48
commit b26dc6de01
15 changed files with 435 additions and 175 deletions
+6 -6
View File
@@ -2,15 +2,15 @@
use core::arch::x86_64::__cpuid;
use crate::arch::x86_64::cpu::msr::*;
use crate::arch::x86_64::memory::mapping::PHYSICAL_MEMORY_OFFSET;
use crate::arch::x86_64::memory::{FRAME_ALLOCATOR, OFFSET_PAGE_TABLE};
use crate::{debugln, serial_print, serial_println};
use x86_64::structures::paging::Translate;
use x86_64::{
PhysAddr, VirtAddr,
structures::paging::{Mapper, Page, PageTableFlags, PhysFrame, Size4KiB},
};
use x86_64::structures::paging::Translate;
use crate::arch::x86_64::cpu::msr::*;
use crate::arch::x86_64::memory::{FRAME_ALLOCATOR, OFFSET_PAGE_TABLE};
const IA32_APIC_BASE_MSR: u32 = 0x1b;
const IA32_APIC_BASE_MSR_BSP: u64 = 0x100;
@@ -53,7 +53,8 @@ fn write_apic_register(apic_base: &PhysAddr, reg: u64, value: u32) {
let virt_addr = unsafe { phys_to_virt(PhysAddr::new(reg_addr)) };
let phys_check = OFFSET_PAGE_TABLE.get().unwrap().lock().translate(virt_addr);
let phys_check =
OFFSET_PAGE_TABLE.get().unwrap().lock().translate(virt_addr);
debugln!("{:?}", phys_check);
unsafe { *(virt_addr.as_u64() as *mut u32) = value };
@@ -88,9 +89,8 @@ pub fn enable_apic() {
write_apic_register(
&apic_base_physical_addr,
0xF0,
read_apic_register(&apic_base_physical_addr, 0xF0) | 0x1FF
read_apic_register(&apic_base_physical_addr, 0xF0) | 0x1FF,
);
}
pub fn enable_timer() {