Skip to content

DwarfCie

Description

Decoded CIE record (the parts we care about). Strings point into the section bytes and are valid for the parsed DwarfCfi’s lifetime.

Usage example (Cross-references)

Usage examples (Cross-references)
        const u8 *initial_instructions;
        u64       initial_instructions_size;
    } DwarfCie;
    
    ///
    } DwarfFde;
    
    typedef Vec(DwarfCie) DwarfCies;
    typedef Vec(DwarfFde) DwarfFdes;
    /// TAGS: Parser, DWARF, CFI, Lookup
    ///
    const DwarfCie *DwarfCfiFindCie(const DwarfCfi *self, u64 cie_offset);
    
    ///
    // ---------------------------------------------------------------------------
    
    static bool parse_cie(BufIter *body, u64 cie_offset, DwarfCie *out) {
        MemSet(out, 0, sizeof(*out));
        out->offset = cie_offset;
        out->cie_offset = cie_offset;
    
        const DwarfCie *cie = DwarfCfiFindCie(cfi, cie_offset);
        if (!cie)
            return false;
            if (id == cie_id) {
                u64      cie_offset = (u64)(rec_start - section_data);
                DwarfCie cie;
                // Body iter starts just after the id field (since parse_cie
                // doesn't re-read id) and spans the remainder of the record.
    }
    
    const DwarfCie *DwarfCfiFindCie(const DwarfCfi *self, u64 cie_offset) {
        if (!self)
            return NULL;
    } CfiVm;
    
    static void cfi_vm_init(CfiVm *vm, const DwarfCie *cie, u64 fde_pc_begin, u8 ra_reg) {
        MemSet(vm, 0, sizeof(*vm));
        vm->row.return_address_register = ra_reg;
            return false;
        }
        const DwarfCie *cie = DwarfCfiFindCie(cfi, fde->cie_offset);
        if (!cie)
            return false;
            DwarfCfi cfi;
            if (DwarfCfiBuildFromElf(&cfi, &elf, base)) {
                const DwarfCie *cie = DwarfCfiFindCie(&cfi, 0);
                ok                  = cie != NULL && cie->version == 1 && cie->has_augmentation == 1 && cie->offset == 0 &&
                     cie->fde_pointer_encoding == 0x03 && cfi.eh_frame_addr == EH_SECTION_VADDR;
Last updated on