mirror of
https://github.com/RGBCube/serenity
synced 2025-05-29 13:55:07 +00:00
Kernel: Print region name+offset for user addresses in thread backtrace
This provides more crucial information to be able to do an addr2line lookup on a backtrace captured with Thread::backtrace. Also change the offset to hexadecimal as this is what is require for addr2line.
This commit is contained in:
parent
85bd454b48
commit
908f86b061
1 changed files with 11 additions and 3 deletions
|
@ -1037,7 +1037,7 @@ struct RecognizedSymbol {
|
||||||
const KernelSymbol* symbol { nullptr };
|
const KernelSymbol* symbol { nullptr };
|
||||||
};
|
};
|
||||||
|
|
||||||
static bool symbolicate(const RecognizedSymbol& symbol, const Process& process, StringBuilder& builder)
|
static bool symbolicate(RecognizedSymbol const& symbol, Process& process, StringBuilder& builder)
|
||||||
{
|
{
|
||||||
if (!symbol.address)
|
if (!symbol.address)
|
||||||
return false;
|
return false;
|
||||||
|
@ -1046,16 +1046,24 @@ static bool symbolicate(const RecognizedSymbol& symbol, const Process& process,
|
||||||
if (!symbol.symbol) {
|
if (!symbol.symbol) {
|
||||||
if (!is_user_address(VirtualAddress(symbol.address))) {
|
if (!is_user_address(VirtualAddress(symbol.address))) {
|
||||||
builder.append("0xdeadc0de\n");
|
builder.append("0xdeadc0de\n");
|
||||||
|
} else {
|
||||||
|
if (auto* region = process.space().find_region_containing({ VirtualAddress(symbol.address), sizeof(FlatPtr) })) {
|
||||||
|
size_t offset = symbol.address - region->vaddr().get();
|
||||||
|
if (auto region_name = region->name(); !region_name.is_null() && !region_name.is_empty())
|
||||||
|
builder.appendff("{:p} {} + 0x{:x}\n", (void*)symbol.address, region_name, offset);
|
||||||
|
else
|
||||||
|
builder.appendff("{:p} {:p} + 0x{:x}\n", (void*)symbol.address, region->vaddr().as_ptr(), offset);
|
||||||
} else {
|
} else {
|
||||||
builder.appendff("{:p}\n", symbol.address);
|
builder.appendff("{:p}\n", symbol.address);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
unsigned offset = symbol.address - symbol.symbol->address;
|
unsigned offset = symbol.address - symbol.symbol->address;
|
||||||
if (symbol.symbol->address == g_highest_kernel_symbol_address && offset > 4096) {
|
if (symbol.symbol->address == g_highest_kernel_symbol_address && offset > 4096) {
|
||||||
builder.appendff("{:p}\n", (void*)(mask_kernel_addresses ? 0xdeadc0de : symbol.address));
|
builder.appendff("{:p}\n", (void*)(mask_kernel_addresses ? 0xdeadc0de : symbol.address));
|
||||||
} else {
|
} else {
|
||||||
builder.appendff("{:p} {} +{}\n", (void*)(mask_kernel_addresses ? 0xdeadc0de : symbol.address), demangle(symbol.symbol->name), offset);
|
builder.appendff("{:p} {} + 0x{:x}\n", (void*)(mask_kernel_addresses ? 0xdeadc0de : symbol.address), demangle(symbol.symbol->name), offset);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue