print rsp in nmi / loop end fault page
This commit is contained in:
@@ -43,6 +43,9 @@ interrupt_stack!(debug, @paranoid, |stack| {
|
||||
|
||||
nmi_handler!(non_maskable, |stack| {
|
||||
println!("Non-maskable interrupt");
|
||||
let rsp: usize;
|
||||
core::arch::asm!("mov {}, rsp", out(reg) rsp);
|
||||
println!("RSP: {:>016X}", rsp);
|
||||
stack.dump();
|
||||
});
|
||||
|
||||
@@ -142,6 +145,7 @@ interrupt_error!(page, |stack| {
|
||||
stack.dump();
|
||||
stack_trace();
|
||||
ksignal(SIGSEGV);
|
||||
loop{};
|
||||
});
|
||||
|
||||
interrupt_stack!(fpu_fault, |stack| {
|
||||
|
||||
@@ -480,7 +480,13 @@ macro_rules! nmi_handler {
|
||||
$ code
|
||||
}
|
||||
}
|
||||
|
||||
fn frsp(){
|
||||
unsafe {
|
||||
let rsp: usize;
|
||||
core::arch::asm!("mov {}, rsp", out(reg) rsp);
|
||||
println!("FRSP: {:>016X}", rsp);
|
||||
}
|
||||
}
|
||||
core::arch::asm!(concat!(
|
||||
"
|
||||
push rdx
|
||||
@@ -577,17 +583,20 @@ macro_rules! nmi_handler {
|
||||
pop_scratch!(),
|
||||
swapgs_iff_ring3_fast!(),
|
||||
"
|
||||
//call {frsp}
|
||||
7:
|
||||
add rsp,$6*8
|
||||
add rsp,$(6*8)
|
||||
|
||||
mov QWORD PTR 5*8[rsp], $0
|
||||
|
||||
//call {frsp}
|
||||
iretq
|
||||
",
|
||||
|
||||
),
|
||||
|
||||
inner = sym inner,
|
||||
frsp = sym frsp,
|
||||
GDT_KERNEL_CODE = const(crate::gdt::GDT_KERNEL_CODE),
|
||||
GDT_KERNEL_DATA = const(crate::gdt::GDT_KERNEL_DATA),
|
||||
|
||||
|
||||
@@ -33,7 +33,6 @@ use self::flag::{MapFlags, PhysmapFlags, WaitFlags};
|
||||
use self::number::*;
|
||||
|
||||
use crate::context::ContextId;
|
||||
use crate::interrupt::exception::divide_by_zero;
|
||||
use crate::interrupt::InterruptStack;
|
||||
use crate::scheme::{FileHandle, SchemeNamespace, memory::MemoryScheme};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user