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);
}- 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; 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; ok = ok && r.offset == 0;
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return ok; ok = ok && r.symbol_name && ZstrFindSubstring(r.symbol_name, "sr_cache_data_marker") != NULL;
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return ok; }
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return ok; ok = ok && ZstrCompare(ra.module_path, ro.module_path) != 0; // two distinct cache entries
SymbolResolverDeinit(&res);
ok = ok && DebugAllocatorLiveCount(&alloc) == baseline; ok = ok && base == r.module_base;
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return ok; ok = ok && DebugAllocatorLiveCount(&alloc) > baseline; // CFI was built
SymbolResolverDeinit(&res);
ok = ok && DebugAllocatorLiveCount(&alloc) == baseline;- In
SymBind.c:64:
ok = ok && ZstrFindSubstring(r.symbol_name, "sr_bind_local_sized") == NULL;
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return ok;- In
SymBind.c:84:
ok = ok && ZstrFindSubstring(r.symbol_name, "sr_bind_local_zero") == NULL;
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return ok; ok = ok && r.symbol_name && ZstrFindSubstring(r.symbol_name, "scd_marker") != NULL;
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return ok; ok = ok && DebugAllocatorLiveCount(&alloc) > baseline;
SymbolResolverDeinit(&res);
ok = ok && DebugAllocatorLiveCount(&alloc) == baseline;- In
SidecarSub.c:49:
ok = ok && (r.module_base + r.symbol_value + r.offset) == addr;
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return ok;- In
SidecarSub.c:72:
ok = ok && DebugAllocatorLiveCount(&alloc) > baseline;
SymbolResolverDeinit(&res);
ok = ok && DebugAllocatorLiveCount(&alloc) == baseline;- In
Sidecar.c:59:
ok = ok && r.source_line > 0;
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return ok;- In
Sidecar.c:87:
ok = ok && DebugAllocatorLiveCount(&alloc) > baseline;
SymbolResolverDeinit(&res);
ok = ok && DebugAllocatorLiveCount(&alloc) == baseline; }
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return ok; }
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return ok; ok = ok && ra.source_column == 0;
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return ok; ok = ok && DebugAllocatorLiveCount(&alloc) > baseline;
SymbolResolverDeinit(&res);
ok = ok && DebugAllocatorLiveCount(&alloc) == baseline;- In
Bias.c:70:
ok = ok && (r.module_base + r.symbol_value + r.offset) == (u64)addr;
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return ok;- In
Bias.c:97:
ok = ok && r0.offset == 0;
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return ok;- In
Bias.c:129:
}
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return ok;- In
Bias.c:160:
}
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return ok;- In
Stripped.c:53:
ResolvedSymbol r;
if (!SymbolResolverResolve(&res, (void *)func, &r)) {
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return false;- In
Stripped.c:58:
}
u64 file_relative = (u64)func - r.module_base;
SymbolResolverDeinit(&res);
// (2) Open the stripped sibling.
- In
Dwarf.c:56:
ResolvedSymbol r;
if (!SymbolResolverResolve(&res, (void *)&dwarf_marker_helper, &r)) {
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return false;- In
Dwarf.c:64:
Elf elf;
if (!ElfOpen(&elf, r.module_path, base)) {
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return false;- In
Dwarf.c:81:
ElfDeinit(&elf);
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return ok;- In
Dwarf.c:102:
ResolvedSymbol r;
if (!SymbolResolverResolve(&res, (void *)&dwarf_marker_helper, &r)) {
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return false;- In
Dwarf.c:110:
Elf elf;
if (!ElfOpen(&elf, r.module_path, base)) {
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return false;- In
Dwarf.c:144:
ElfDeinit(&elf);
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return ok;- In
Dwarf.c:165:
ResolvedSymbol r;
if (!SymbolResolverResolve(&res, (void *)&dwarf_marker_helper, &r)) {
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return false;- In
Dwarf.c:173:
Elf elf;
if (!ElfOpen(&elf, r.module_path, base)) {
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return false;- In
Dwarf.c:188:
ElfDeinit(&elf);
SymbolResolverDeinit(&res);
DefaultAllocatorDeinit(&alloc);
return ok;
Last updated on