Skip to content
DwarfCfiDeinit

DwarfCfiDeinit

Description

Release every CIE / FDE table the CFI parser allocated. Safe on a zeroed struct.

Success

Returns to the caller. *self is zeroed.

Failure

Function cannot fail. NULL self is a no-op.

Usage example (Cross-references)

Usage examples (Cross-references)
            }
            if (e->cfi_built && e->cfi_ok) {
                DwarfCfiDeinit(&e->cfi);
            }
            if (e->functions_built && e->functions_ok) {
        }
        if (!ok) {
            DwarfCfiDeinit(out);
            return false;
        }
    }
    
    void DwarfCfiDeinit(DwarfCfi *self) {
        if (!self)
            return;
            const DwarfFde *fde = DwarfCfiFindFde(&cfi, target_pc);
            ok                  = fde != NULL && DwarfCfiBuildRow(&cfi, fde, target_pc, out_row);
            DwarfCfiDeinit(&cfi);
        }
        ElfDeinit(&elf);
            const DwarfFde *fde = DwarfCfiFindFde(&cfi, target_pc);
            ok                  = fde != NULL && DwarfCfiBuildRow(&cfi, fde, target_pc, out_row);
            DwarfCfiDeinit(&cfi);
        }
        ElfDeinit(&elf);
            const DwarfFde *fde = DwarfCfiFindFde(&cfi, target_pc);
            ok                  = fde != NULL && DwarfCfiBuildRow(&cfi, fde, target_pc, out_row);
            DwarfCfiDeinit(&cfi);
        }
        ElfDeinit(&elf);
            const DwarfFde *fde = DwarfCfiFindFde(&cfi, target_pc);
            ok                  = fde != NULL && DwarfCfiBuildRow(&cfi, fde, target_pc, out_row);
            DwarfCfiDeinit(&cfi);
        }
        ElfDeinit(&elf);
                ok = fde != NULL && DwarfCfiBuildRow(&cfi, fde, 0x5000, &row) && row.cfa.reg == 7 &&
                     cfi.eh_frame_addr == EH_SECTION_VADDR;
                DwarfCfiDeinit(&cfi);
            }
            ElfDeinit(&elf);
                ok = DwarfCfiFindFde(&cfi, 0x10ff) != NULL  // last in-range address
                  && DwarfCfiFindFde(&cfi, 0x1100) == NULL; // == end: exclusive -> miss
                DwarfCfiDeinit(&cfi);
            }
            ElfDeinit(&elf);
                ok = fde != NULL && DwarfCfiBuildRow(&cfi, fde, 0x1080, &row) // in range -> ok
                  && !DwarfCfiBuildRow(&cfi, fde, 0x1100, &row);              // == end -> rejected
                DwarfCfiDeinit(&cfi);
            }
            ElfDeinit(&elf);
                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;
                DwarfCfiDeinit(&cfi);
            }
            ElfDeinit(&elf);
                const DwarfFde *fde = DwarfCfiFindFde(&cfi, 0x1000);
                ok                  = fde != NULL && fde->offset == fde_off;
                DwarfCfiDeinit(&cfi);
            }
            ElfDeinit(&elf);
        }
        if (built) {
            DwarfCfiDeinit(&cfi);
        }
Last updated on