diff --git a/kernel/src/arch/riscv/backtrace.rs b/kernel/src/arch/riscv/backtrace.rs index 8f70104..bec0b6b 100644 --- a/kernel/src/arch/riscv/backtrace.rs +++ b/kernel/src/arch/riscv/backtrace.rs @@ -18,7 +18,11 @@ impl FrameWalker { fn is_valid(&self) -> bool { let fp_valid = unsafe { BSS_START.as_virt_addr() <= self.current_fp && self.current_fp < BSS_END.as_virt_addr() }; let pc_valid = unsafe { TEXT_START.as_virt_addr() <= self.current_pc && self.current_pc < TEXT_END.as_virt_addr() }; - fp_valid && pc_valid + + // pc might be 0xffff_ffff in the first frame + let first = self.current_pc == VirtAddr(usize::MAX); + + fp_valid && (pc_valid || first) } pub fn new() -> Self {