Lines Matching defs:fde
142 * encoding scheme of FDE PC begin and range.
269 * XXX Use DW_EH_PE_absptr for default FDE PC start/range,
310 Dwarf_Fde fde;
315 if ((fde = calloc(1, sizeof(struct _Dwarf_Fde))) == NULL) {
319 STAILQ_INSERT_TAIL(&fs->fs_fdelist, fde, fde_next);
321 fde->fde_dbg = dbg;
322 fde->fde_fs = fs;
323 fde->fde_addr = ds->ds_data + *off;
324 fde->fde_offset = *off;
338 fde->fde_length = length;
341 fde->fde_cieoff = dbg->read(ds->ds_data, off, 4);
342 cieoff = *off - (4 + fde->fde_cieoff);
344 if (cieoff == fde->fde_offset) {
349 fde->fde_cieoff = dbg->read(ds->ds_data, off, dwarf_size);
350 cieoff = fde->fde_cieoff;
360 fde->fde_cie = cie;
363 * The FDE PC start/range for .eh_frame is encoded according
371 fde->fde_initloc = val;
373 * FDE PC range should not be relative value to anything.
380 fde->fde_adrange = val;
382 fde->fde_initloc = dbg->read(ds->ds_data, off,
384 fde->fde_adrange = dbg->read(ds->ds_data, off,
388 /* Optional FDE augmentation data for .eh_frame section. (ignored) */
390 fde->fde_auglen = _dwarf_read_uleb128(ds->ds_data, off);
391 fde->fde_augdata = ds->ds_data + *off;
392 *off += fde->fde_auglen;
395 fde->fde_inst = ds->ds_data + *off;
397 fde->fde_instlen = fde->fde_offset + 4 + length - *off;
399 fde->fde_instlen = fde->fde_offset + 12 + length - *off;
401 *off += fde->fde_instlen;
404 printf("fde:");
409 " fde_instlen=%ju off=%ju\n", fde->fde_offset, fde->fde_length,
410 fde->fde_cieoff, fde->fde_instlen, *off);
422 Dwarf_Fde fde, tfde;
429 STAILQ_FOREACH_SAFE(fde, &fs->fs_fdelist, fde_next, tfde) {
430 STAILQ_REMOVE(&fs->fs_fdelist, fde, _Dwarf_Fde, fde_next);
431 free(fde);
448 Dwarf_Fde fde;
525 /* Create FDE array. */
534 STAILQ_FOREACH(fde, &fs->fs_fdelist, fde_next) {
535 fs->fs_fdearray[i++] = fde;
1194 _dwarf_frame_get_internal_table(Dwarf_Fde fde, Dwarf_Addr pc_req,
1205 dbg = fde->fde_dbg;
1220 cie = fde->fde_cie;
1228 /* Run instructions in FDE. */
1229 if (pc_req >= fde->fde_initloc) {
1231 fde->fde_inst, fde->fde_instlen, cie->cie_caf,
1232 cie->cie_daf, fde->fde_initloc, pc_req, &row_pc, error);
1336 _dwarf_frame_fde_add_inst(Dwarf_P_Fde fde, Dwarf_Small op, Dwarf_Unsigned val1,
1343 #define ds fde
1348 assert(fde != NULL && fde->fde_dbg != NULL);
1349 dbg = fde->fde_dbg;
1351 if (fde->fde_inst == NULL) {
1352 fde->fde_instcap = _FDE_INST_INIT_SIZE;
1353 fde->fde_instlen = 0;
1354 if ((fde->fde_inst = malloc((size_t) fde->fde_instcap)) ==
1360 assert(fde->fde_instcap != 0);
1486 Dwarf_Rel_Section drs, Dwarf_P_Fde fde, Dwarf_Error *error)
1493 assert(fde != NULL && fde->fde_cie != NULL);
1495 fde->fde_offset = offset = ds->ds_size;
1496 fde->fde_length = 0;
1497 fde->fde_cieoff = fde->fde_cie->cie_offset;
1500 RCHECK(WRITE_VALUE(fde->fde_length, 4));
1504 ds->ds_size, 0, fde->fde_cieoff, ".debug_frame", error));
1506 /* Write FDE initial location. */
1508 dbg->dbg_pointer_size, ds->ds_size, fde->fde_symndx,
1509 fde->fde_initloc, NULL, error));
1512 * Write FDE address range. Use a pair of relocation entries if
1516 if (fde->fde_esymndx > 0)
1518 dbg->dbg_pointer_size, ds->ds_size, fde->fde_symndx,
1519 fde->fde_esymndx, fde->fde_initloc, fde->fde_eoff, error));
1521 RCHECK(WRITE_VALUE(fde->fde_adrange, dbg->dbg_pointer_size));
1523 /* Write FDE frame instructions. */
1524 RCHECK(WRITE_BLOCK(fde->fde_inst, fde->fde_instlen));
1527 len = ds->ds_size - fde->fde_offset - 4;
1528 fde->fde_length = roundup(len, dbg->dbg_pointer_size);
1529 while (len++ < fde->fde_length)
1533 dbg->write(ds->ds_data, &offset, fde->fde_length, 4);
1547 Dwarf_P_Fde fde;
1565 /* Generate list of FDE. */
1566 STAILQ_FOREACH(fde, &dbg->dbgp_fdelist, fde_next)
1567 RCHECK(_dwarf_frame_gen_fde(dbg, ds, drs, fde, error));
1590 Dwarf_P_Fde fde, tfde;
1604 STAILQ_FOREACH_SAFE(fde, &dbg->dbgp_fdelist, fde_next, tfde) {
1605 STAILQ_REMOVE(&dbg->dbgp_fdelist, fde, _Dwarf_Fde, fde_next);
1606 if (fde->fde_inst != NULL)
1607 free(fde->fde_inst);
1608 free(fde);