Skip to content
SymbolResolverDeinit

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;
        }
        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;
    
        StrDeinit(&out);
        SymbolResolverDeinit(&res);
        DefaultAllocatorDeinit(&alloc);
        return ok;
    
        StrDeinit(&rendered);
        SymbolResolverDeinit(&res);
        DefaultAllocatorDeinit(&alloc);
        return ok;
        }
    
        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.
        ResolvedSymbol r;
        if (!SymbolResolverResolve(&res, (void *)&dwarf_marker_helper, &r)) {
            SymbolResolverDeinit(&res);
            DefaultAllocatorDeinit(&alloc);
            return false;
        Elf elf;
        if (!ElfOpen(&elf, r.module_path, base)) {
            SymbolResolverDeinit(&res);
            DefaultAllocatorDeinit(&alloc);
            return false;
    
        ElfDeinit(&elf);
        SymbolResolverDeinit(&res);
        DefaultAllocatorDeinit(&alloc);
        return ok;
        ResolvedSymbol r;
        if (!SymbolResolverResolve(&res, (void *)&dwarf_marker_helper, &r)) {
            SymbolResolverDeinit(&res);
            DefaultAllocatorDeinit(&alloc);
            return false;
        Elf elf;
        if (!ElfOpen(&elf, r.module_path, base)) {
            SymbolResolverDeinit(&res);
            DefaultAllocatorDeinit(&alloc);
            return false;
    
        ElfDeinit(&elf);
        SymbolResolverDeinit(&res);
        DefaultAllocatorDeinit(&alloc);
        return ok;
        ResolvedSymbol r;
        if (!SymbolResolverResolve(&res, (void *)&dwarf_marker_helper, &r)) {
            SymbolResolverDeinit(&res);
            DefaultAllocatorDeinit(&alloc);
            return false;
        Elf elf;
        if (!ElfOpen(&elf, r.module_path, base)) {
            SymbolResolverDeinit(&res);
            DefaultAllocatorDeinit(&alloc);
            return false;
    
        ElfDeinit(&elf);
        SymbolResolverDeinit(&res);
        DefaultAllocatorDeinit(&alloc);
        return ok;
Last updated on