mirror of
https://github.com/RGBCube/serenity
synced 2025-07-24 19:17:41 +00:00
UserspaceEmulator: Add Emulator::dump_backtrace()
This gives you a nice, symbolicated backtrace at the current EIP. :^)
This commit is contained in:
parent
584923445c
commit
ddf7b817df
2 changed files with 21 additions and 0 deletions
|
@ -178,6 +178,25 @@ int Emulator::exec()
|
||||||
return m_exit_status;
|
return m_exit_status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Emulator::dump_backtrace()
|
||||||
|
{
|
||||||
|
u32 offset = 0;
|
||||||
|
String symbol = m_elf->symbolicate(m_cpu.eip(), &offset);
|
||||||
|
|
||||||
|
printf("> %#08x %s +%#x\n", m_cpu.eip(), symbol.characters(), offset);
|
||||||
|
|
||||||
|
u32 frame_ptr = m_cpu.ebp();
|
||||||
|
while (frame_ptr) {
|
||||||
|
u32 ret_ptr = m_mmu.read32({ 0x20, frame_ptr + 4 });
|
||||||
|
if (!ret_ptr)
|
||||||
|
return;
|
||||||
|
symbol = m_elf->symbolicate(ret_ptr, &offset);
|
||||||
|
printf("> %#08x %s +%#x\n", ret_ptr, symbol.characters(), offset);
|
||||||
|
|
||||||
|
frame_ptr = m_mmu.read32({ 0x20, frame_ptr });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
u32 Emulator::virt_syscall(u32 function, u32 arg1, u32 arg2, u32 arg3)
|
u32 Emulator::virt_syscall(u32 function, u32 arg1, u32 arg2, u32 arg3)
|
||||||
{
|
{
|
||||||
(void)arg2;
|
(void)arg2;
|
||||||
|
@ -198,6 +217,7 @@ u32 Emulator::virt_syscall(u32 function, u32 arg1, u32 arg2, u32 arg3)
|
||||||
return 0;
|
return 0;
|
||||||
default:
|
default:
|
||||||
warn() << "Unimplemented syscall!";
|
warn() << "Unimplemented syscall!";
|
||||||
|
dump_backtrace();
|
||||||
TODO();
|
TODO();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,6 +40,7 @@ public:
|
||||||
explicit Emulator(NonnullRefPtr<ELF::Loader>);
|
explicit Emulator(NonnullRefPtr<ELF::Loader>);
|
||||||
|
|
||||||
bool load_elf();
|
bool load_elf();
|
||||||
|
void dump_backtrace();
|
||||||
|
|
||||||
int exec();
|
int exec();
|
||||||
u32 virt_syscall(u32 function, u32 arg1, u32 arg2, u32 arg3);
|
u32 virt_syscall(u32 function, u32 arg1, u32 arg2, u32 arg3);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue