Lines Matching refs:fde
108 /* Frame Description Entry (FDE). */
112 /* Return the final location in this FDE. */
119 /* CIE for this FDE. */
122 /* First location associated with this FDE. */
125 /* Number of bytes of program instructions described by this FDE. */
132 /* True if this FDE is read from a .eh_frame instead of a .debug_frame
167 /* The FDE table. */
251 /* Execute FDE program from INSN_PTR possibly up to INSN_END or up to inferior
256 execute_cfa_program (struct dwarf2_fde *fde, const gdb_byte *insn_ptr,
261 int eh_frame_p = fde->eh_frame_p;
293 fs->pc = read_encoded_value (fde->cie->unit, fde->cie->encoding,
294 fde->cie->ptr_size, insn_ptr,
295 &bytes_read, fde->initial_location);
516 /* Don't allow remember/restore between CIE and FDE programs. */
533 struct dwarf2_fde fde;
536 memset (&fde, 0, sizeof fde);
541 fde.cie = &cie;
543 dwarf2_frame_state fs (0, fde.cie);
554 const gdb_byte *out = execute_cfa_program (&fde, insns, insn_end, gdbarch,
562 auto r1 = dwarf2_frame_adjust_regnum (gdbarch, 1, fde.eh_frame_p);
563 auto r2 = dwarf2_frame_adjust_regnum (gdbarch, 2, fde.eh_frame_p);
744 struct dwarf2_fde *fde)
754 if (fde->cie->version == 1)
757 if (fde->cie->version == 1)
766 if (fde->cie->version == 3
767 && (!startswith (fde->cie->augmentation, "armcc")
768 || strchr (fde->cie->augmentation + 5, '+') == NULL))
787 struct dwarf2_fde *fde;
791 /* Find the correct FDE. */
792 fde = dwarf2_frame_find_fde (&pc1, &per_objfile);
793 if (fde == NULL)
798 dwarf2_frame_state fs (pc1, fde->cie);
801 dwarf2_frame_find_quirks (&fs, fde);
804 execute_cfa_program (fde, fde->cie->initial_instructions,
805 fde->cie->end, gdbarch, pc, &fs,
811 /* Then decode the insns in the FDE up to our target PC. */
812 execute_cfa_program (fde, fde->instructions, fde->end, gdbarch, pc, &fs,
900 struct dwarf2_fde *fde;
929 /* Find the correct FDE. */
930 fde = dwarf2_frame_find_fde (&pc1, &cache->per_objfile);
931 gdb_assert (fde != NULL);
937 struct dwarf2_frame_state fs (pc1, fde->cie);
939 cache->addr_size = fde->cie->addr_size;
942 dwarf2_frame_find_quirks (&fs, fde);
945 execute_cfa_program (fde, fde->cie->initial_instructions,
946 fde->cie->end, gdbarch,
954 in an address that's within the range of FDE locations. This
960 && fde->initial_location <= (unrelocated_addr) (entry_pc - text_offset)
961 && (unrelocated_addr) (entry_pc - text_offset) < fde->end_addr ())
963 /* Decode the insns in the FDE up to the entry PC. */
964 instr = execute_cfa_program (fde, fde->instructions, fde->end, gdbarch,
976 instr = fde->instructions;
978 /* Then decode the insns in the FDE up to our target PC. */
979 execute_cfa_program (fde, instr, fde->end, gdbarch,
1321 address is placed on the stack by the OS, its FDE must
1323 select the FDE of the previous function. */
1325 struct dwarf2_fde *fde = dwarf2_frame_find_fde (&block_addr, NULL);
1327 if (!fde)
1334 if (fde->cie->signal_frame
1460 technical reasons, it encodes addresses in its FDE's in a different
1462 that's used for a particular FDE is determined by the 'R'
1470 position in the FDE, ...). Bit 7, indicates that the address
1499 FDE's. */
1597 bsearch_fde_cmp (const dwarf2_fde *fde, unrelocated_addr seek_pc)
1599 if (fde->end_addr () <= seek_pc)
1601 if (fde->initial_location <= seek_pc)
1631 /* Find the FDE for *PC. Return a pointer to the FDE, and store the
1678 /* Add FDE to FDE_TABLE. */
1680 add_fde (dwarf2_fde_table *fde_table, struct dwarf2_fde *fde)
1682 if (fde->address_range == 0)
1686 fde_table->push_back (fde);
1691 /* Defines the type of eh_frames that are expected to be decoded: CIE, FDE
1709 /* Decode the next CIE or FDE, entry_type specifies the expected type.
1785 /* The encoding for FDE's in a normal .debug_frame section
1891 /* "R" indicates a byte indicating how FDE addresses are encoded. */
1938 /* This is a FDE. */
1939 struct dwarf2_fde *fde;
1941 /* Check that an FDE was expected. */
1943 error (_("Found an FDE when not expecting it."));
1946 address within the FDE where the CIE pointer is stored and the
1959 fde = XOBNEW (&unit->obstack, struct dwarf2_fde);
1960 fde->cie = find_cie (cie_table, cie_pointer);
1961 if (fde->cie == NULL)
1967 fde->cie = find_cie (cie_table, cie_pointer);
1970 gdb_assert (fde->cie != NULL);
1973 = read_encoded_value (unit, fde->cie->encoding, fde->cie->ptr_size,
1975 fde->initial_location
1980 = read_encoded_value (unit, fde->cie->encoding & 0x0f,
1981 fde->cie->ptr_size, buf, &bytes_read,
1984 fde->address_range = addr - (ULONGEST) fde->initial_location;
1988 augmentation field in the FDE as well. The only thing known
1991 if (fde->cie->saw_z_augmentation)
2003 fde->instructions = buf;
2004 fde->end = end;
2006 fde->eh_frame_p = eh_frame_p;
2008 add_fde (fde_table, fde);
2014 /* Read a CIE or FDE in BUF and decode it. Entry_type specifies whether we
2015 expect an FDE or a CIE. */
2045 sized such that the FDE length and CIE fields happen to be
2220 /* Prepare FDE table for lookups. */
2224 the relevant symbols to zero, but doesn't zero the FDE *end*
2229 out the wrong FDE. To work around this, when overlaps are
2232 Start by finding the first FDE with non-zero start. Below
2235 for (struct dwarf2_fde *fde : fde_table)
2237 if (fde->initial_location != (unrelocated_addr) 0)
2239 first_non_zero_fde = fde;
2245 for eh_frame_p) fde entries so bsearch result is predictable.
2247 for (struct dwarf2_fde *fde : fde_table)
2249 if (fde->initial_location == (unrelocated_addr) 0
2251 && first_non_zero_fde->initial_location < fde->end_addr ())
2255 && fde_prev->initial_location == fde->initial_location)
2258 unit->fde_table.push_back (fde);
2259 fde_prev = fde;