Wrote stack unwinder. NEEDTO: fix NoUnwindInfo
Probably incorrect PC was set.
This commit is contained in:
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user