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)
    // ---------------------------------------------------------------------------
    
    static bool parse_cie(DwUCursor *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 == 0) {
                u64       cie_offset = (u64)(rec_start - section_data);
                DwarfCie  cie;
                DwUCursor body = {.p = section_cur.p, .end = body_end};
                if (parse_cie(&body, cie_offset, &cie)) {
    }
    
    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;
        const u8 *initial_instructions;
        u64       initial_instructions_size;
    } DwarfCie;
    
    ///
    } DwarfFde;
    
    typedef Vec(DwarfCie) DwarfCies;
    typedef Vec(DwarfFde) DwarfFdes;
    /// Find a CIE by its `.eh_frame` offset (used to link FDE -> CIE).
    ///
    const DwarfCie *DwarfCfiFindCie(const DwarfCfi *self, u64 cie_offset);
    
    void DwarfCfiDeinit(DwarfCfi *self);
Last updated on