SymbolResolverDeinit
Description
Tear down the resolver, closing every cached Elf and freeing the cache + ProcMaps. Safe on a zeroed struct.
Success
Returns to the caller. self is zeroed.
Failure
Function cannot fail.
Usage example (Cross-references)
Usage examples (Cross-references)
}
void SymbolResolverDeinit(SymbolResolver *self) {
if (!self)
return;- In
Backtrace.c:502:
}
format_walk_with(out, frames, count, &res);
SymbolResolverDeinit(&res);
} ok = ok && DebugAllocatorLiveCount(&alloc) > baseline;
SymbolResolverDeinit(&res);
// Correct teardown (main + sidecar ElfDeinit + Vec free) returns to 0.
ok = ok && DebugAllocatorLiveCount(&alloc) == baseline; ok = ok && ZstrFindSubstring(r.symbol_name, "sr1_marker_a") != NULL;
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return ok; ok = ok && ra.symbol_value != rb.symbol_value;
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return ok; ok = ok && (r.module_base + r.symbol_value + r.offset) == addr;
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return ok; ok = ok && (rk.module_base + rk.symbol_value + rk.offset) == (base + K);
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return ok; ok = ok && ZstrCompare(ra.module_path, rb.module_path) == 0;
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return ok; ok = ok && r.offset < r.symbol_size;
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return ok; ok = ok && r0.symbol_name && r0.symbol_size > 0;
if (!ok) {
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return false; ok = ok && rlast.offset == size - 1;
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return ok; }
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return ok; bool ok = !SymbolResolverResolve(&res, (void *)(u64)0x1000, &r);
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return ok; ok = ok && r.symbol_name != NULL;
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return ok; ok = ok && r.symbol_name != NULL && ZstrFindSubstring(r.symbol_name, "symres_marker_helper") != NULL;
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return ok; ok = ok && ZstrCompare(ra.module_path, rb.module_path) == 0; // same module file
SymbolResolverDeinit(&res);
DebugAllocatorDeinit(&alloc);
return ok; ok = ok && ZstrCompare(rc.module_path, rd.module_path) == 0; // same module file
SymbolResolverDeinit(&res);
DebugAllocatorDeinit(&alloc);
return ok; ok = ok && live2 > live1; // second module was opened
SymbolResolverDeinit(&res);
DebugAllocatorDeinit(&alloc);
return ok; ok = ok && ZstrCompare(r1.module_path, r2.module_path) == 0; // same module
SymbolResolverDeinit(&res);
DebugAllocatorDeinit(&alloc);
return ok; bool ok = SymbolResolverResolve(&res, (void *)&sr1_marker_a, &r);
SymbolResolverDeinit(&res);
ok = ok && DebugAllocatorLiveCount(&alloc) == baseline;- In
Backtrace.c:114:
StrDeinit(&out);
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return ok;- In
Backtrace.c:158:
StrDeinit(&rendered);
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return ok;- In
Backtrace.c:216:
}
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return ok; ResolvedSymbol r;
if (!SymbolResolverResolve(&res, (void *)func, &r)) {
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return false; }
u64 file_relative = (u64)func - r.module_base;
SymbolResolverDeinit(&res);
// (2) Open the stripped sibling.
- In
Dwarf.c:55:
ResolvedSymbol r;
if (!SymbolResolverResolve(&res, (void *)&dwarf_marker_helper, &r)) {
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return false;- In
Dwarf.c:63:
Elf elf;
if (!ElfOpen(&elf, r.module_path, base)) {
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return false;- In
Dwarf.c:80:
ElfDeinit(&elf);
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return ok;- In
Dwarf.c:101:
ResolvedSymbol r;
if (!SymbolResolverResolve(&res, (void *)&dwarf_marker_helper, &r)) {
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return false;- In
Dwarf.c:109:
Elf elf;
if (!ElfOpen(&elf, r.module_path, base)) {
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return false;- In
Dwarf.c:143:
ElfDeinit(&elf);
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return ok;- In
Dwarf.c:164:
ResolvedSymbol r;
if (!SymbolResolverResolve(&res, (void *)&dwarf_marker_helper, &r)) {
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return false;- In
Dwarf.c:172:
Elf elf;
if (!ElfOpen(&elf, r.module_path, base)) {
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return false;- In
Dwarf.c:187:
ElfDeinit(&elf);
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return ok;
Last updated on