Skip to content
DwarfLinesBuildFromElf

DwarfLinesBuildFromElf

Description

Parse the .debug_line section of a previously-opened Elf.

Parameters

Name Direction Description
out out Populated on success.
elf in ELF file to read from. Borrowed; not retained.
alloc in Allocator for the resulting tables + string pool.

Success

Returns true. out->entries.length may be 0 if the binary has no .debug_line section (stripped or built without -g).

Failure

Returns false; logs the failing step. out is left zeroed.

Usage example (Cross-references)

Usage examples (Cross-references)
        if (!cache_entry->dwarf_built) {
            cache_entry->dwarf_built = true;
            cache_entry->dwarf_ok    = DwarfLinesBuildFromElf(&cache_entry->dwarf, &cache_entry->elf, self->allocator);
        }
        const DwarfLineEntry *de = NULL;
                cache_entry->sidecar_dwarf_built = true;
                cache_entry->sidecar_dwarf_ok =
                    DwarfLinesBuildFromElf(&cache_entry->sidecar_dwarf, &cache_entry->sidecar, self->allocator);
            }
            if (cache_entry->sidecar_dwarf_ok) {
    bool dwarf_lines_build_from_elf(DwarfLines *out, const Elf *elf, Allocator *alloc) {
        if (!out || !elf || !alloc) {
            LOG_FATAL("DwarfLinesBuildFromElf: NULL argument");
        }
        MemSet(out, 0, sizeof(*out));
        if (!ElfOpenFromMemoryCopy(elf, elfbuf, (size)elf_len, base))
            return false;
        bool built = DwarfLinesBuildFromElf(lines, elf, base);
        return built;
    }
    
        DwarfLines lines;
        bool       built = DwarfLinesBuildFromElf(&lines, &elf, ALLOCATOR_OF(&alloc));
        bool       ok    = built && VecLen(&lines.entries) > 0;
    
        DwarfLines lines;
        bool       built = DwarfLinesBuildFromElf(&lines, &elf, base);
        bool       ok    = false;
        if (built) {
    
        DwarfLines lines;
        bool       built = DwarfLinesBuildFromElf(&lines, &elf, base);
        bool       ok    = built;
        if (built) {
    
        DwarfLines lines;
        bool       built = DwarfLinesBuildFromElf(&lines, &elf, base);
        // The malformed unit is rejected: either the build fails outright, or
        // (defensively) it succeeds but yields no usable rows. A caller must
            return false;
        }
        fx->built = DwarfLinesBuildFromElf(&fx->lines, &fx->elf, base);
        if (!fx->built) {
            ElfDeinit(&fx->elf);
            return false;
    
        bool built = DwarfLinesBuildFromElf(lines, &elf, base);
        ElfDeinit(&elf);
        return built;
        if (!ElfOpenFromMemoryCopy(elf, elfbuf, (size)elf_len, base))
            return false;
        return DwarfLinesBuildFromElf(out, elf, base);
    }
    
        DwarfLines lines;
        bool       built = DwarfLinesBuildFromElf(&lines, &elf, base);
        // The over-long extended record must be rejected: either the build fails
        // outright, or it yields a table where the only safe row (0x17000) is
            return false;
    
        bool built = DwarfLinesBuildFromElf(lines, &elf, base);
        ElfDeinit(&elf);
        return built;
    
        DwarfLines lines;
        bool       built = DwarfLinesBuildFromElf(&lines, &elf, base);
        bool       ok    = built; // 562: `ok=true`->false => built would be false.
        if (built) {
    
        DwarfLines lines;
        bool       built = DwarfLinesBuildFromElf(&lines, &elf, base);
        // Real code: rejected -> built == false. Mutant (ok=true): built == true.
        bool ok = !built;
    
        DwarfLines lines;
        bool       built = DwarfLinesBuildFromElf(&lines, &elf, base);
        // Real code rejects the overrun -> built == false. Mutant returns true.
        bool ok = !built;
    
        DwarfLines lines;
        bool       built = DwarfLinesBuildFromElf(&lines, &elf, base);
        bool       ok    = built;
        if (built) {
        size       before = DebugAllocatorLiveCount(&dbg);
        DwarfLines lines;
        bool       built = DwarfLinesBuildFromElf(&lines, &elf, base);
        bool       ok    = built;
        if (built) {
        size       before = DebugAllocatorLiveCount(&dbg);
        DwarfLines lines;
        bool       built = DwarfLinesBuildFromElf(&lines, &elf, base);
        bool       ok    = built;
        if (built) {
Last updated on