Kernel: Make dump_backtrace_impl() take base pointer as a FlatPtr

Since FlatPtr is register width agnostic. :^)
This commit is contained in:
Andreas Kling 2020-05-23 12:42:27 +02:00
parent 4177953530
commit 7379c589c7

View file

@ -115,7 +115,7 @@ static void load_kernel_sybols_from_data(const ByteBuffer& buffer)
g_kernel_symbols_available = true;
}
NEVER_INLINE void dump_backtrace_impl(u32 ebp, bool use_ksyms)
NEVER_INLINE void dump_backtrace_impl(FlatPtr base_pointer, bool use_ksyms)
{
SmapDisabler disabler;
#if 0
@ -141,14 +141,14 @@ NEVER_INLINE void dump_backtrace_impl(u32 ebp, bool use_ksyms)
RecognizedSymbol recognized_symbols[max_recognized_symbol_count];
size_t recognized_symbol_count = 0;
if (use_ksyms) {
for (FlatPtr* stack_ptr = (FlatPtr*)ebp;
(Process::current ? Process::current->validate_read_from_kernel(VirtualAddress(stack_ptr), sizeof(void*) * 2) : 1) && recognized_symbol_count < max_recognized_symbol_count; stack_ptr = (u32*)*stack_ptr) {
for (FlatPtr* stack_ptr = (FlatPtr*)base_pointer;
(Process::current ? Process::current->validate_read_from_kernel(VirtualAddress(stack_ptr), sizeof(void*) * 2) : 1) && recognized_symbol_count < max_recognized_symbol_count; stack_ptr = (FlatPtr*)*stack_ptr) {
FlatPtr retaddr = stack_ptr[1];
recognized_symbols[recognized_symbol_count++] = { retaddr, symbolicate_kernel_address(retaddr) };
}
} else {
for (FlatPtr* stack_ptr = (FlatPtr*)ebp;
(Process::current ? Process::current->validate_read_from_kernel(VirtualAddress(stack_ptr), sizeof(void*) * 2) : 1); stack_ptr = (u32*)*stack_ptr) {
for (FlatPtr* stack_ptr = (FlatPtr*)base_pointer;
(Process::current ? Process::current->validate_read_from_kernel(VirtualAddress(stack_ptr), sizeof(void*) * 2) : 1); stack_ptr = (FlatPtr*)*stack_ptr) {
FlatPtr retaddr = stack_ptr[1];
dbg() << String::format("%x", retaddr) << " (next: " << String::format("%x", (stack_ptr ? (u32*)*stack_ptr : 0)) << ")";
}