1 /* Frame unwinder for frames with DWARF Call Frame Information.
3 Copyright (C) 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011
4 Free Software Foundation, Inc.
6 Contributed by Mark Kettenis.
8 This file is part of GDB.
10 This program is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 3 of the License, or
13 (at your option) any later version.
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
20 You should have received a copy of the GNU General Public License
21 along with this program. If not, see <http://www.gnu.org/licenses/>. */
24 #include "dwarf2expr.h"
27 #include "frame-base.h"
28 #include "frame-unwind.h"
36 #include "gdb_assert.h"
37 #include "gdb_string.h"
39 #include "complaints.h"
40 #include "dwarf2-frame.h"
42 #include "dwarf2loc.h"
43 #include "exceptions.h"
47 /* Call Frame Information (CFI). */
49 /* Common Information Entry (CIE). */
53 /* Computation Unit for this CIE. */
54 struct comp_unit *unit;
56 /* Offset into the .debug_frame section where this CIE was found.
57 Used to identify this CIE. */
60 /* Constant that is factored out of all advance location
62 ULONGEST code_alignment_factor;
64 /* Constants that is factored out of all offset instructions. */
65 LONGEST data_alignment_factor;
67 /* Return address column. */
68 ULONGEST return_address_register;
70 /* Instruction sequence to initialize a register set. */
71 gdb_byte *initial_instructions;
74 /* Saved augmentation, in case it's needed later. */
77 /* Encoding of addresses. */
80 /* Target address size in bytes. */
83 /* Target pointer size in bytes. */
86 /* True if a 'z' augmentation existed. */
87 unsigned char saw_z_augmentation;
89 /* True if an 'S' augmentation existed. */
90 unsigned char signal_frame;
92 /* The version recorded in the CIE. */
93 unsigned char version;
95 /* The segment size. */
96 unsigned char segment_size;
99 struct dwarf2_cie_table
102 struct dwarf2_cie **entries;
105 /* Frame Description Entry (FDE). */
109 /* CIE for this FDE. */
110 struct dwarf2_cie *cie;
112 /* First location associated with this FDE. */
113 CORE_ADDR initial_location;
115 /* Number of bytes of program instructions described by this FDE. */
116 CORE_ADDR address_range;
118 /* Instruction sequence. */
119 gdb_byte *instructions;
122 /* True if this FDE is read from a .eh_frame instead of a .debug_frame
124 unsigned char eh_frame_p;
127 struct dwarf2_fde_table
130 struct dwarf2_fde **entries;
133 /* A minimal decoding of DWARF2 compilation units. We only decode
134 what's needed to get to the call frame information. */
138 /* Keep the bfd convenient. */
141 struct objfile *objfile;
143 /* Pointer to the .debug_frame section loaded into memory. */
144 gdb_byte *dwarf_frame_buffer;
146 /* Length of the loaded .debug_frame section. */
147 bfd_size_type dwarf_frame_size;
149 /* Pointer to the .debug_frame section. */
150 asection *dwarf_frame_section;
152 /* Base for DW_EH_PE_datarel encodings. */
155 /* Base for DW_EH_PE_textrel encodings. */
159 static struct dwarf2_fde *dwarf2_frame_find_fde (CORE_ADDR *pc,
160 CORE_ADDR *out_offset);
162 static int dwarf2_frame_adjust_regnum (struct gdbarch *gdbarch, int regnum,
165 static CORE_ADDR read_encoded_value (struct comp_unit *unit, gdb_byte encoding,
166 int ptr_len, const gdb_byte *buf,
167 unsigned int *bytes_read_ptr,
168 CORE_ADDR func_base);
171 /* Structure describing a frame state. */
173 struct dwarf2_frame_state
175 /* Each register save state can be described in terms of a CFA slot,
176 another register, or a location expression. */
177 struct dwarf2_frame_state_reg_info
179 struct dwarf2_frame_state_reg *reg;
189 const gdb_byte *cfa_exp;
191 /* Used to implement DW_CFA_remember_state. */
192 struct dwarf2_frame_state_reg_info *prev;
195 /* The PC described by the current frame state. */
198 /* Initial register set from the CIE.
199 Used to implement DW_CFA_restore. */
200 struct dwarf2_frame_state_reg_info initial;
202 /* The information we care about from the CIE. */
205 ULONGEST retaddr_column;
207 /* Flags for known producer quirks. */
209 /* The ARM compilers, in DWARF2 mode, assume that DW_CFA_def_cfa
210 and DW_CFA_def_cfa_offset takes a factored offset. */
211 int armcc_cfa_offsets_sf;
213 /* The ARM compilers, in DWARF2 or DWARF3 mode, may assume that
214 the CFA is defined as REG - OFFSET rather than REG + OFFSET. */
215 int armcc_cfa_offsets_reversed;
218 /* Store the length the expression for the CFA in the `cfa_reg' field,
219 which is unused in that case. */
220 #define cfa_exp_len cfa_reg
222 /* Assert that the register set RS is large enough to store gdbarch_num_regs
223 columns. If necessary, enlarge the register set. */
226 dwarf2_frame_state_alloc_regs (struct dwarf2_frame_state_reg_info *rs,
229 size_t size = sizeof (struct dwarf2_frame_state_reg);
231 if (num_regs <= rs->num_regs)
234 rs->reg = (struct dwarf2_frame_state_reg *)
235 xrealloc (rs->reg, num_regs * size);
237 /* Initialize newly allocated registers. */
238 memset (rs->reg + rs->num_regs, 0, (num_regs - rs->num_regs) * size);
239 rs->num_regs = num_regs;
242 /* Copy the register columns in register set RS into newly allocated
243 memory and return a pointer to this newly created copy. */
245 static struct dwarf2_frame_state_reg *
246 dwarf2_frame_state_copy_regs (struct dwarf2_frame_state_reg_info *rs)
248 size_t size = rs->num_regs * sizeof (struct dwarf2_frame_state_reg);
249 struct dwarf2_frame_state_reg *reg;
251 reg = (struct dwarf2_frame_state_reg *) xmalloc (size);
252 memcpy (reg, rs->reg, size);
257 /* Release the memory allocated to register set RS. */
260 dwarf2_frame_state_free_regs (struct dwarf2_frame_state_reg_info *rs)
264 dwarf2_frame_state_free_regs (rs->prev);
271 /* Release the memory allocated to the frame state FS. */
274 dwarf2_frame_state_free (void *p)
276 struct dwarf2_frame_state *fs = p;
278 dwarf2_frame_state_free_regs (fs->initial.prev);
279 dwarf2_frame_state_free_regs (fs->regs.prev);
280 xfree (fs->initial.reg);
281 xfree (fs->regs.reg);
286 /* Helper functions for execute_stack_op. */
289 read_reg (void *baton, int reg)
291 struct frame_info *this_frame = (struct frame_info *) baton;
292 struct gdbarch *gdbarch = get_frame_arch (this_frame);
296 regnum = gdbarch_dwarf2_reg_to_regnum (gdbarch, reg);
298 buf = alloca (register_size (gdbarch, regnum));
299 get_frame_register (this_frame, regnum, buf);
301 /* Convert the register to an integer. This returns a LONGEST
302 rather than a CORE_ADDR, but unpack_pointer does the same thing
303 under the covers, and this makes more sense for non-pointer
304 registers. Maybe read_reg and the associated interfaces should
305 deal with "struct value" instead of CORE_ADDR. */
306 return unpack_long (register_type (gdbarch, regnum), buf);
310 read_mem (void *baton, gdb_byte *buf, CORE_ADDR addr, size_t len)
312 read_memory (addr, buf, len);
315 /* Execute the required actions for both the DW_CFA_restore and
316 DW_CFA_restore_extended instructions. */
318 dwarf2_restore_rule (struct gdbarch *gdbarch, ULONGEST reg_num,
319 struct dwarf2_frame_state *fs, int eh_frame_p)
323 gdb_assert (fs->initial.reg);
324 reg = dwarf2_frame_adjust_regnum (gdbarch, reg_num, eh_frame_p);
325 dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
327 /* Check if this register was explicitly initialized in the
328 CIE initial instructions. If not, default the rule to
330 if (reg < fs->initial.num_regs)
331 fs->regs.reg[reg] = fs->initial.reg[reg];
333 fs->regs.reg[reg].how = DWARF2_FRAME_REG_UNSPECIFIED;
335 if (fs->regs.reg[reg].how == DWARF2_FRAME_REG_UNSPECIFIED)
336 complaint (&symfile_complaints, _("\
337 incomplete CFI data; DW_CFA_restore unspecified\n\
338 register %s (#%d) at %s"),
339 gdbarch_register_name
340 (gdbarch, gdbarch_dwarf2_reg_to_regnum (gdbarch, reg)),
341 gdbarch_dwarf2_reg_to_regnum (gdbarch, reg),
342 paddress (gdbarch, fs->pc));
345 /* Virtual method table for execute_stack_op below. */
347 static const struct dwarf_expr_context_funcs dwarf2_frame_ctx_funcs =
351 ctx_no_get_frame_base,
352 ctx_no_get_frame_cfa,
354 ctx_no_get_tls_address,
360 execute_stack_op (const gdb_byte *exp, ULONGEST len, int addr_size,
361 CORE_ADDR offset, struct frame_info *this_frame,
362 CORE_ADDR initial, int initial_in_stack_memory)
364 struct dwarf_expr_context *ctx;
366 struct cleanup *old_chain;
368 ctx = new_dwarf_expr_context ();
369 old_chain = make_cleanup_free_dwarf_expr_context (ctx);
370 make_cleanup_value_free_to_mark (value_mark ());
372 ctx->gdbarch = get_frame_arch (this_frame);
373 ctx->addr_size = addr_size;
374 ctx->offset = offset;
375 ctx->baton = this_frame;
376 ctx->funcs = &dwarf2_frame_ctx_funcs;
378 dwarf_expr_push_address (ctx, initial, initial_in_stack_memory);
379 dwarf_expr_eval (ctx, exp, len);
381 if (ctx->location == DWARF_VALUE_MEMORY)
382 result = dwarf_expr_fetch_address (ctx, 0);
383 else if (ctx->location == DWARF_VALUE_REGISTER)
384 result = read_reg (this_frame, value_as_long (dwarf_expr_fetch (ctx, 0)));
387 /* This is actually invalid DWARF, but if we ever do run across
388 it somehow, we might as well support it. So, instead, report
389 it as unimplemented. */
391 Not implemented: computing unwound register using explicit value operator"));
394 do_cleanups (old_chain);
401 execute_cfa_program (struct dwarf2_fde *fde, const gdb_byte *insn_ptr,
402 const gdb_byte *insn_end, struct gdbarch *gdbarch,
403 CORE_ADDR pc, struct dwarf2_frame_state *fs)
405 int eh_frame_p = fde->eh_frame_p;
407 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
409 while (insn_ptr < insn_end && fs->pc <= pc)
411 gdb_byte insn = *insn_ptr++;
415 if ((insn & 0xc0) == DW_CFA_advance_loc)
416 fs->pc += (insn & 0x3f) * fs->code_align;
417 else if ((insn & 0xc0) == DW_CFA_offset)
420 reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p);
421 insn_ptr = read_uleb128 (insn_ptr, insn_end, &utmp);
422 offset = utmp * fs->data_align;
423 dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
424 fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_OFFSET;
425 fs->regs.reg[reg].loc.offset = offset;
427 else if ((insn & 0xc0) == DW_CFA_restore)
430 dwarf2_restore_rule (gdbarch, reg, fs, eh_frame_p);
437 fs->pc = read_encoded_value (fde->cie->unit, fde->cie->encoding,
438 fde->cie->ptr_size, insn_ptr,
439 &bytes_read, fde->initial_location);
440 /* Apply the objfile offset for relocatable objects. */
441 fs->pc += ANOFFSET (fde->cie->unit->objfile->section_offsets,
442 SECT_OFF_TEXT (fde->cie->unit->objfile));
443 insn_ptr += bytes_read;
446 case DW_CFA_advance_loc1:
447 utmp = extract_unsigned_integer (insn_ptr, 1, byte_order);
448 fs->pc += utmp * fs->code_align;
451 case DW_CFA_advance_loc2:
452 utmp = extract_unsigned_integer (insn_ptr, 2, byte_order);
453 fs->pc += utmp * fs->code_align;
456 case DW_CFA_advance_loc4:
457 utmp = extract_unsigned_integer (insn_ptr, 4, byte_order);
458 fs->pc += utmp * fs->code_align;
462 case DW_CFA_offset_extended:
463 insn_ptr = read_uleb128 (insn_ptr, insn_end, ®);
464 reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p);
465 insn_ptr = read_uleb128 (insn_ptr, insn_end, &utmp);
466 offset = utmp * fs->data_align;
467 dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
468 fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_OFFSET;
469 fs->regs.reg[reg].loc.offset = offset;
472 case DW_CFA_restore_extended:
473 insn_ptr = read_uleb128 (insn_ptr, insn_end, ®);
474 dwarf2_restore_rule (gdbarch, reg, fs, eh_frame_p);
477 case DW_CFA_undefined:
478 insn_ptr = read_uleb128 (insn_ptr, insn_end, ®);
479 reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p);
480 dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
481 fs->regs.reg[reg].how = DWARF2_FRAME_REG_UNDEFINED;
484 case DW_CFA_same_value:
485 insn_ptr = read_uleb128 (insn_ptr, insn_end, ®);
486 reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p);
487 dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
488 fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAME_VALUE;
491 case DW_CFA_register:
492 insn_ptr = read_uleb128 (insn_ptr, insn_end, ®);
493 reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p);
494 insn_ptr = read_uleb128 (insn_ptr, insn_end, &utmp);
495 utmp = dwarf2_frame_adjust_regnum (gdbarch, utmp, eh_frame_p);
496 dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
497 fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_REG;
498 fs->regs.reg[reg].loc.reg = utmp;
501 case DW_CFA_remember_state:
503 struct dwarf2_frame_state_reg_info *new_rs;
505 new_rs = XMALLOC (struct dwarf2_frame_state_reg_info);
507 fs->regs.reg = dwarf2_frame_state_copy_regs (&fs->regs);
508 fs->regs.prev = new_rs;
512 case DW_CFA_restore_state:
514 struct dwarf2_frame_state_reg_info *old_rs = fs->regs.prev;
518 complaint (&symfile_complaints, _("\
519 bad CFI data; mismatched DW_CFA_restore_state at %s"),
520 paddress (gdbarch, fs->pc));
524 xfree (fs->regs.reg);
532 insn_ptr = read_uleb128 (insn_ptr, insn_end, &fs->regs.cfa_reg);
533 insn_ptr = read_uleb128 (insn_ptr, insn_end, &utmp);
535 if (fs->armcc_cfa_offsets_sf)
536 utmp *= fs->data_align;
538 fs->regs.cfa_offset = utmp;
539 fs->regs.cfa_how = CFA_REG_OFFSET;
542 case DW_CFA_def_cfa_register:
543 insn_ptr = read_uleb128 (insn_ptr, insn_end, &fs->regs.cfa_reg);
544 fs->regs.cfa_reg = dwarf2_frame_adjust_regnum (gdbarch,
547 fs->regs.cfa_how = CFA_REG_OFFSET;
550 case DW_CFA_def_cfa_offset:
551 insn_ptr = read_uleb128 (insn_ptr, insn_end, &utmp);
553 if (fs->armcc_cfa_offsets_sf)
554 utmp *= fs->data_align;
556 fs->regs.cfa_offset = utmp;
557 /* cfa_how deliberately not set. */
563 case DW_CFA_def_cfa_expression:
564 insn_ptr = read_uleb128 (insn_ptr, insn_end,
565 &fs->regs.cfa_exp_len);
566 fs->regs.cfa_exp = insn_ptr;
567 fs->regs.cfa_how = CFA_EXP;
568 insn_ptr += fs->regs.cfa_exp_len;
571 case DW_CFA_expression:
572 insn_ptr = read_uleb128 (insn_ptr, insn_end, ®);
573 reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p);
574 dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
575 insn_ptr = read_uleb128 (insn_ptr, insn_end, &utmp);
576 fs->regs.reg[reg].loc.exp = insn_ptr;
577 fs->regs.reg[reg].exp_len = utmp;
578 fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_EXP;
582 case DW_CFA_offset_extended_sf:
583 insn_ptr = read_uleb128 (insn_ptr, insn_end, ®);
584 reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p);
585 insn_ptr = read_sleb128 (insn_ptr, insn_end, &offset);
586 offset *= fs->data_align;
587 dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
588 fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_OFFSET;
589 fs->regs.reg[reg].loc.offset = offset;
592 case DW_CFA_val_offset:
593 insn_ptr = read_uleb128 (insn_ptr, insn_end, ®);
594 dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
595 insn_ptr = read_uleb128 (insn_ptr, insn_end, &utmp);
596 offset = utmp * fs->data_align;
597 fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_VAL_OFFSET;
598 fs->regs.reg[reg].loc.offset = offset;
601 case DW_CFA_val_offset_sf:
602 insn_ptr = read_uleb128 (insn_ptr, insn_end, ®);
603 dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
604 insn_ptr = read_sleb128 (insn_ptr, insn_end, &offset);
605 offset *= fs->data_align;
606 fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_VAL_OFFSET;
607 fs->regs.reg[reg].loc.offset = offset;
610 case DW_CFA_val_expression:
611 insn_ptr = read_uleb128 (insn_ptr, insn_end, ®);
612 dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
613 insn_ptr = read_uleb128 (insn_ptr, insn_end, &utmp);
614 fs->regs.reg[reg].loc.exp = insn_ptr;
615 fs->regs.reg[reg].exp_len = utmp;
616 fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_VAL_EXP;
620 case DW_CFA_def_cfa_sf:
621 insn_ptr = read_uleb128 (insn_ptr, insn_end, &fs->regs.cfa_reg);
622 fs->regs.cfa_reg = dwarf2_frame_adjust_regnum (gdbarch,
625 insn_ptr = read_sleb128 (insn_ptr, insn_end, &offset);
626 fs->regs.cfa_offset = offset * fs->data_align;
627 fs->regs.cfa_how = CFA_REG_OFFSET;
630 case DW_CFA_def_cfa_offset_sf:
631 insn_ptr = read_sleb128 (insn_ptr, insn_end, &offset);
632 fs->regs.cfa_offset = offset * fs->data_align;
633 /* cfa_how deliberately not set. */
636 case DW_CFA_GNU_window_save:
637 /* This is SPARC-specific code, and contains hard-coded
638 constants for the register numbering scheme used by
639 GCC. Rather than having a architecture-specific
640 operation that's only ever used by a single
641 architecture, we provide the implementation here.
642 Incidentally that's what GCC does too in its
645 int size = register_size (gdbarch, 0);
647 dwarf2_frame_state_alloc_regs (&fs->regs, 32);
648 for (reg = 8; reg < 16; reg++)
650 fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_REG;
651 fs->regs.reg[reg].loc.reg = reg + 16;
653 for (reg = 16; reg < 32; reg++)
655 fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_OFFSET;
656 fs->regs.reg[reg].loc.offset = (reg - 16) * size;
661 case DW_CFA_GNU_args_size:
663 insn_ptr = read_uleb128 (insn_ptr, insn_end, &utmp);
666 case DW_CFA_GNU_negative_offset_extended:
667 insn_ptr = read_uleb128 (insn_ptr, insn_end, ®);
668 reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p);
669 insn_ptr = read_uleb128 (insn_ptr, insn_end, &offset);
670 offset *= fs->data_align;
671 dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
672 fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_OFFSET;
673 fs->regs.reg[reg].loc.offset = -offset;
677 internal_error (__FILE__, __LINE__,
678 _("Unknown CFI encountered."));
683 /* Don't allow remember/restore between CIE and FDE programs. */
684 dwarf2_frame_state_free_regs (fs->regs.prev);
685 fs->regs.prev = NULL;
689 /* Architecture-specific operations. */
691 /* Per-architecture data key. */
692 static struct gdbarch_data *dwarf2_frame_data;
694 struct dwarf2_frame_ops
696 /* Pre-initialize the register state REG for register REGNUM. */
697 void (*init_reg) (struct gdbarch *, int, struct dwarf2_frame_state_reg *,
698 struct frame_info *);
700 /* Check whether the THIS_FRAME is a signal trampoline. */
701 int (*signal_frame_p) (struct gdbarch *, struct frame_info *);
703 /* Convert .eh_frame register number to DWARF register number, or
704 adjust .debug_frame register number. */
705 int (*adjust_regnum) (struct gdbarch *, int, int);
708 /* Default architecture-specific register state initialization
712 dwarf2_frame_default_init_reg (struct gdbarch *gdbarch, int regnum,
713 struct dwarf2_frame_state_reg *reg,
714 struct frame_info *this_frame)
716 /* If we have a register that acts as a program counter, mark it as
717 a destination for the return address. If we have a register that
718 serves as the stack pointer, arrange for it to be filled with the
719 call frame address (CFA). The other registers are marked as
722 We copy the return address to the program counter, since many
723 parts in GDB assume that it is possible to get the return address
724 by unwinding the program counter register. However, on ISA's
725 with a dedicated return address register, the CFI usually only
726 contains information to unwind that return address register.
728 The reason we're treating the stack pointer special here is
729 because in many cases GCC doesn't emit CFI for the stack pointer
730 and implicitly assumes that it is equal to the CFA. This makes
731 some sense since the DWARF specification (version 3, draft 8,
734 "Typically, the CFA is defined to be the value of the stack
735 pointer at the call site in the previous frame (which may be
736 different from its value on entry to the current frame)."
738 However, this isn't true for all platforms supported by GCC
739 (e.g. IBM S/390 and zSeries). Those architectures should provide
740 their own architecture-specific initialization function. */
742 if (regnum == gdbarch_pc_regnum (gdbarch))
743 reg->how = DWARF2_FRAME_REG_RA;
744 else if (regnum == gdbarch_sp_regnum (gdbarch))
745 reg->how = DWARF2_FRAME_REG_CFA;
748 /* Return a default for the architecture-specific operations. */
751 dwarf2_frame_init (struct obstack *obstack)
753 struct dwarf2_frame_ops *ops;
755 ops = OBSTACK_ZALLOC (obstack, struct dwarf2_frame_ops);
756 ops->init_reg = dwarf2_frame_default_init_reg;
760 /* Set the architecture-specific register state initialization
761 function for GDBARCH to INIT_REG. */
764 dwarf2_frame_set_init_reg (struct gdbarch *gdbarch,
765 void (*init_reg) (struct gdbarch *, int,
766 struct dwarf2_frame_state_reg *,
767 struct frame_info *))
769 struct dwarf2_frame_ops *ops = gdbarch_data (gdbarch, dwarf2_frame_data);
771 ops->init_reg = init_reg;
774 /* Pre-initialize the register state REG for register REGNUM. */
777 dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
778 struct dwarf2_frame_state_reg *reg,
779 struct frame_info *this_frame)
781 struct dwarf2_frame_ops *ops = gdbarch_data (gdbarch, dwarf2_frame_data);
783 ops->init_reg (gdbarch, regnum, reg, this_frame);
786 /* Set the architecture-specific signal trampoline recognition
787 function for GDBARCH to SIGNAL_FRAME_P. */
790 dwarf2_frame_set_signal_frame_p (struct gdbarch *gdbarch,
791 int (*signal_frame_p) (struct gdbarch *,
792 struct frame_info *))
794 struct dwarf2_frame_ops *ops = gdbarch_data (gdbarch, dwarf2_frame_data);
796 ops->signal_frame_p = signal_frame_p;
799 /* Query the architecture-specific signal frame recognizer for
803 dwarf2_frame_signal_frame_p (struct gdbarch *gdbarch,
804 struct frame_info *this_frame)
806 struct dwarf2_frame_ops *ops = gdbarch_data (gdbarch, dwarf2_frame_data);
808 if (ops->signal_frame_p == NULL)
810 return ops->signal_frame_p (gdbarch, this_frame);
813 /* Set the architecture-specific adjustment of .eh_frame and .debug_frame
817 dwarf2_frame_set_adjust_regnum (struct gdbarch *gdbarch,
818 int (*adjust_regnum) (struct gdbarch *,
821 struct dwarf2_frame_ops *ops = gdbarch_data (gdbarch, dwarf2_frame_data);
823 ops->adjust_regnum = adjust_regnum;
826 /* Translate a .eh_frame register to DWARF register, or adjust a .debug_frame
830 dwarf2_frame_adjust_regnum (struct gdbarch *gdbarch,
831 int regnum, int eh_frame_p)
833 struct dwarf2_frame_ops *ops = gdbarch_data (gdbarch, dwarf2_frame_data);
835 if (ops->adjust_regnum == NULL)
837 return ops->adjust_regnum (gdbarch, regnum, eh_frame_p);
841 dwarf2_frame_find_quirks (struct dwarf2_frame_state *fs,
842 struct dwarf2_fde *fde)
846 s = find_pc_symtab (fs->pc);
850 if (producer_is_realview (s->producer))
852 if (fde->cie->version == 1)
853 fs->armcc_cfa_offsets_sf = 1;
855 if (fde->cie->version == 1)
856 fs->armcc_cfa_offsets_reversed = 1;
858 /* The reversed offset problem is present in some compilers
859 using DWARF3, but it was eventually fixed. Check the ARM
860 defined augmentations, which are in the format "armcc" followed
861 by a list of one-character options. The "+" option means
862 this problem is fixed (no quirk needed). If the armcc
863 augmentation is missing, the quirk is needed. */
864 if (fde->cie->version == 3
865 && (strncmp (fde->cie->augmentation, "armcc", 5) != 0
866 || strchr (fde->cie->augmentation + 5, '+') == NULL))
867 fs->armcc_cfa_offsets_reversed = 1;
875 dwarf2_compile_cfa_to_ax (struct agent_expr *expr, struct axs_value *loc,
876 struct gdbarch *gdbarch,
878 struct dwarf2_per_cu_data *data)
880 const int num_regs = gdbarch_num_regs (gdbarch)
881 + gdbarch_num_pseudo_regs (gdbarch);
882 struct dwarf2_fde *fde;
883 CORE_ADDR text_offset, cfa;
884 struct dwarf2_frame_state fs;
887 memset (&fs, 0, sizeof (struct dwarf2_frame_state));
891 /* Find the correct FDE. */
892 fde = dwarf2_frame_find_fde (&fs.pc, &text_offset);
894 error (_("Could not compute CFA; needed to translate this expression"));
896 /* Extract any interesting information from the CIE. */
897 fs.data_align = fde->cie->data_alignment_factor;
898 fs.code_align = fde->cie->code_alignment_factor;
899 fs.retaddr_column = fde->cie->return_address_register;
900 addr_size = fde->cie->addr_size;
902 /* Check for "quirks" - known bugs in producers. */
903 dwarf2_frame_find_quirks (&fs, fde);
905 /* First decode all the insns in the CIE. */
906 execute_cfa_program (fde, fde->cie->initial_instructions,
907 fde->cie->end, gdbarch, pc, &fs);
909 /* Save the initialized register set. */
910 fs.initial = fs.regs;
911 fs.initial.reg = dwarf2_frame_state_copy_regs (&fs.regs);
913 /* Then decode the insns in the FDE up to our target PC. */
914 execute_cfa_program (fde, fde->instructions, fde->end, gdbarch, pc, &fs);
916 /* Calculate the CFA. */
917 switch (fs.regs.cfa_how)
921 int regnum = gdbarch_dwarf2_reg_to_regnum (gdbarch, fs.regs.cfa_reg);
924 error (_("Unable to access DWARF register number %d"),
925 (int) fs.regs.cfa_reg); /* FIXME */
926 ax_reg (expr, regnum);
928 if (fs.regs.cfa_offset != 0)
930 if (fs.armcc_cfa_offsets_reversed)
931 ax_const_l (expr, -fs.regs.cfa_offset);
933 ax_const_l (expr, fs.regs.cfa_offset);
934 ax_simple (expr, aop_add);
940 ax_const_l (expr, text_offset);
941 dwarf2_compile_expr_to_ax (expr, loc, gdbarch, addr_size,
943 fs.regs.cfa_exp + fs.regs.cfa_exp_len,
948 internal_error (__FILE__, __LINE__, _("Unknown CFA rule."));
953 struct dwarf2_frame_cache
955 /* DWARF Call Frame Address. */
958 /* Set if the return address column was marked as unavailable
959 (required non-collected memory or registers to compute). */
960 int unavailable_retaddr;
962 /* Set if the return address column was marked as undefined. */
963 int undefined_retaddr;
965 /* Saved registers, indexed by GDB register number, not by DWARF
967 struct dwarf2_frame_state_reg *reg;
969 /* Return address register. */
970 struct dwarf2_frame_state_reg retaddr_reg;
972 /* Target address size in bytes. */
975 /* The .text offset. */
976 CORE_ADDR text_offset;
979 static struct dwarf2_frame_cache *
980 dwarf2_frame_cache (struct frame_info *this_frame, void **this_cache)
982 struct cleanup *old_chain;
983 struct gdbarch *gdbarch = get_frame_arch (this_frame);
984 const int num_regs = gdbarch_num_regs (gdbarch)
985 + gdbarch_num_pseudo_regs (gdbarch);
986 struct dwarf2_frame_cache *cache;
987 struct dwarf2_frame_state *fs;
988 struct dwarf2_fde *fde;
989 volatile struct gdb_exception ex;
994 /* Allocate a new cache. */
995 cache = FRAME_OBSTACK_ZALLOC (struct dwarf2_frame_cache);
996 cache->reg = FRAME_OBSTACK_CALLOC (num_regs, struct dwarf2_frame_state_reg);
999 /* Allocate and initialize the frame state. */
1000 fs = XZALLOC (struct dwarf2_frame_state);
1001 old_chain = make_cleanup (dwarf2_frame_state_free, fs);
1005 Note that if the next frame is never supposed to return (i.e. a call
1006 to abort), the compiler might optimize away the instruction at
1007 its return address. As a result the return address will
1008 point at some random instruction, and the CFI for that
1009 instruction is probably worthless to us. GCC's unwinder solves
1010 this problem by substracting 1 from the return address to get an
1011 address in the middle of a presumed call instruction (or the
1012 instruction in the associated delay slot). This should only be
1013 done for "normal" frames and not for resume-type frames (signal
1014 handlers, sentinel frames, dummy frames). The function
1015 get_frame_address_in_block does just this. It's not clear how
1016 reliable the method is though; there is the potential for the
1017 register state pre-call being different to that on return. */
1018 fs->pc = get_frame_address_in_block (this_frame);
1020 /* Find the correct FDE. */
1021 fde = dwarf2_frame_find_fde (&fs->pc, &cache->text_offset);
1022 gdb_assert (fde != NULL);
1024 /* Extract any interesting information from the CIE. */
1025 fs->data_align = fde->cie->data_alignment_factor;
1026 fs->code_align = fde->cie->code_alignment_factor;
1027 fs->retaddr_column = fde->cie->return_address_register;
1028 cache->addr_size = fde->cie->addr_size;
1030 /* Check for "quirks" - known bugs in producers. */
1031 dwarf2_frame_find_quirks (fs, fde);
1033 /* First decode all the insns in the CIE. */
1034 execute_cfa_program (fde, fde->cie->initial_instructions,
1035 fde->cie->end, gdbarch, get_frame_pc (this_frame), fs);
1037 /* Save the initialized register set. */
1038 fs->initial = fs->regs;
1039 fs->initial.reg = dwarf2_frame_state_copy_regs (&fs->regs);
1041 /* Then decode the insns in the FDE up to our target PC. */
1042 execute_cfa_program (fde, fde->instructions, fde->end, gdbarch,
1043 get_frame_pc (this_frame), fs);
1045 TRY_CATCH (ex, RETURN_MASK_ERROR)
1047 /* Calculate the CFA. */
1048 switch (fs->regs.cfa_how)
1050 case CFA_REG_OFFSET:
1051 cache->cfa = read_reg (this_frame, fs->regs.cfa_reg);
1052 if (fs->armcc_cfa_offsets_reversed)
1053 cache->cfa -= fs->regs.cfa_offset;
1055 cache->cfa += fs->regs.cfa_offset;
1060 execute_stack_op (fs->regs.cfa_exp, fs->regs.cfa_exp_len,
1061 cache->addr_size, cache->text_offset,
1066 internal_error (__FILE__, __LINE__, _("Unknown CFA rule."));
1071 if (ex.error == NOT_AVAILABLE_ERROR)
1073 cache->unavailable_retaddr = 1;
1077 throw_exception (ex);
1080 /* Initialize the register state. */
1084 for (regnum = 0; regnum < num_regs; regnum++)
1085 dwarf2_frame_init_reg (gdbarch, regnum, &cache->reg[regnum], this_frame);
1088 /* Go through the DWARF2 CFI generated table and save its register
1089 location information in the cache. Note that we don't skip the
1090 return address column; it's perfectly all right for it to
1091 correspond to a real register. If it doesn't correspond to a
1092 real register, or if we shouldn't treat it as such,
1093 gdbarch_dwarf2_reg_to_regnum should be defined to return a number outside
1094 the range [0, gdbarch_num_regs). */
1096 int column; /* CFI speak for "register number". */
1098 for (column = 0; column < fs->regs.num_regs; column++)
1100 /* Use the GDB register number as the destination index. */
1101 int regnum = gdbarch_dwarf2_reg_to_regnum (gdbarch, column);
1103 /* If there's no corresponding GDB register, ignore it. */
1104 if (regnum < 0 || regnum >= num_regs)
1107 /* NOTE: cagney/2003-09-05: CFI should specify the disposition
1108 of all debug info registers. If it doesn't, complain (but
1109 not too loudly). It turns out that GCC assumes that an
1110 unspecified register implies "same value" when CFI (draft
1111 7) specifies nothing at all. Such a register could equally
1112 be interpreted as "undefined". Also note that this check
1113 isn't sufficient; it only checks that all registers in the
1114 range [0 .. max column] are specified, and won't detect
1115 problems when a debug info register falls outside of the
1116 table. We need a way of iterating through all the valid
1117 DWARF2 register numbers. */
1118 if (fs->regs.reg[column].how == DWARF2_FRAME_REG_UNSPECIFIED)
1120 if (cache->reg[regnum].how == DWARF2_FRAME_REG_UNSPECIFIED)
1121 complaint (&symfile_complaints, _("\
1122 incomplete CFI data; unspecified registers (e.g., %s) at %s"),
1123 gdbarch_register_name (gdbarch, regnum),
1124 paddress (gdbarch, fs->pc));
1127 cache->reg[regnum] = fs->regs.reg[column];
1131 /* Eliminate any DWARF2_FRAME_REG_RA rules, and save the information
1132 we need for evaluating DWARF2_FRAME_REG_RA_OFFSET rules. */
1136 for (regnum = 0; regnum < num_regs; regnum++)
1138 if (cache->reg[regnum].how == DWARF2_FRAME_REG_RA
1139 || cache->reg[regnum].how == DWARF2_FRAME_REG_RA_OFFSET)
1141 struct dwarf2_frame_state_reg *retaddr_reg =
1142 &fs->regs.reg[fs->retaddr_column];
1144 /* It seems rather bizarre to specify an "empty" column as
1145 the return adress column. However, this is exactly
1146 what GCC does on some targets. It turns out that GCC
1147 assumes that the return address can be found in the
1148 register corresponding to the return address column.
1149 Incidentally, that's how we should treat a return
1150 address column specifying "same value" too. */
1151 if (fs->retaddr_column < fs->regs.num_regs
1152 && retaddr_reg->how != DWARF2_FRAME_REG_UNSPECIFIED
1153 && retaddr_reg->how != DWARF2_FRAME_REG_SAME_VALUE)
1155 if (cache->reg[regnum].how == DWARF2_FRAME_REG_RA)
1156 cache->reg[regnum] = *retaddr_reg;
1158 cache->retaddr_reg = *retaddr_reg;
1162 if (cache->reg[regnum].how == DWARF2_FRAME_REG_RA)
1164 cache->reg[regnum].loc.reg = fs->retaddr_column;
1165 cache->reg[regnum].how = DWARF2_FRAME_REG_SAVED_REG;
1169 cache->retaddr_reg.loc.reg = fs->retaddr_column;
1170 cache->retaddr_reg.how = DWARF2_FRAME_REG_SAVED_REG;
1177 if (fs->retaddr_column < fs->regs.num_regs
1178 && fs->regs.reg[fs->retaddr_column].how == DWARF2_FRAME_REG_UNDEFINED)
1179 cache->undefined_retaddr = 1;
1181 do_cleanups (old_chain);
1186 static enum unwind_stop_reason
1187 dwarf2_frame_unwind_stop_reason (struct frame_info *this_frame,
1190 struct dwarf2_frame_cache *cache
1191 = dwarf2_frame_cache (this_frame, this_cache);
1193 if (cache->unavailable_retaddr)
1194 return UNWIND_UNAVAILABLE;
1196 if (cache->undefined_retaddr)
1197 return UNWIND_OUTERMOST;
1199 return UNWIND_NO_REASON;
1203 dwarf2_frame_this_id (struct frame_info *this_frame, void **this_cache,
1204 struct frame_id *this_id)
1206 struct dwarf2_frame_cache *cache =
1207 dwarf2_frame_cache (this_frame, this_cache);
1209 if (cache->unavailable_retaddr)
1212 if (cache->undefined_retaddr)
1215 (*this_id) = frame_id_build (cache->cfa, get_frame_func (this_frame));
1218 static struct value *
1219 dwarf2_frame_prev_register (struct frame_info *this_frame, void **this_cache,
1222 struct gdbarch *gdbarch = get_frame_arch (this_frame);
1223 struct dwarf2_frame_cache *cache =
1224 dwarf2_frame_cache (this_frame, this_cache);
1228 switch (cache->reg[regnum].how)
1230 case DWARF2_FRAME_REG_UNDEFINED:
1231 /* If CFI explicitly specified that the value isn't defined,
1232 mark it as optimized away; the value isn't available. */
1233 return frame_unwind_got_optimized (this_frame, regnum);
1235 case DWARF2_FRAME_REG_SAVED_OFFSET:
1236 addr = cache->cfa + cache->reg[regnum].loc.offset;
1237 return frame_unwind_got_memory (this_frame, regnum, addr);
1239 case DWARF2_FRAME_REG_SAVED_REG:
1241 = gdbarch_dwarf2_reg_to_regnum (gdbarch, cache->reg[regnum].loc.reg);
1242 return frame_unwind_got_register (this_frame, regnum, realnum);
1244 case DWARF2_FRAME_REG_SAVED_EXP:
1245 addr = execute_stack_op (cache->reg[regnum].loc.exp,
1246 cache->reg[regnum].exp_len,
1247 cache->addr_size, cache->text_offset,
1248 this_frame, cache->cfa, 1);
1249 return frame_unwind_got_memory (this_frame, regnum, addr);
1251 case DWARF2_FRAME_REG_SAVED_VAL_OFFSET:
1252 addr = cache->cfa + cache->reg[regnum].loc.offset;
1253 return frame_unwind_got_constant (this_frame, regnum, addr);
1255 case DWARF2_FRAME_REG_SAVED_VAL_EXP:
1256 addr = execute_stack_op (cache->reg[regnum].loc.exp,
1257 cache->reg[regnum].exp_len,
1258 cache->addr_size, cache->text_offset,
1259 this_frame, cache->cfa, 1);
1260 return frame_unwind_got_constant (this_frame, regnum, addr);
1262 case DWARF2_FRAME_REG_UNSPECIFIED:
1263 /* GCC, in its infinite wisdom decided to not provide unwind
1264 information for registers that are "same value". Since
1265 DWARF2 (3 draft 7) doesn't define such behavior, said
1266 registers are actually undefined (which is different to CFI
1267 "undefined"). Code above issues a complaint about this.
1268 Here just fudge the books, assume GCC, and that the value is
1269 more inner on the stack. */
1270 return frame_unwind_got_register (this_frame, regnum, regnum);
1272 case DWARF2_FRAME_REG_SAME_VALUE:
1273 return frame_unwind_got_register (this_frame, regnum, regnum);
1275 case DWARF2_FRAME_REG_CFA:
1276 return frame_unwind_got_address (this_frame, regnum, cache->cfa);
1278 case DWARF2_FRAME_REG_CFA_OFFSET:
1279 addr = cache->cfa + cache->reg[regnum].loc.offset;
1280 return frame_unwind_got_address (this_frame, regnum, addr);
1282 case DWARF2_FRAME_REG_RA_OFFSET:
1283 addr = cache->reg[regnum].loc.offset;
1284 regnum = gdbarch_dwarf2_reg_to_regnum
1285 (gdbarch, cache->retaddr_reg.loc.reg);
1286 addr += get_frame_register_unsigned (this_frame, regnum);
1287 return frame_unwind_got_address (this_frame, regnum, addr);
1289 case DWARF2_FRAME_REG_FN:
1290 return cache->reg[regnum].loc.fn (this_frame, this_cache, regnum);
1293 internal_error (__FILE__, __LINE__, _("Unknown register rule."));
1298 dwarf2_frame_sniffer (const struct frame_unwind *self,
1299 struct frame_info *this_frame, void **this_cache)
1301 /* Grab an address that is guarenteed to reside somewhere within the
1302 function. get_frame_pc(), with a no-return next function, can
1303 end up returning something past the end of this function's body.
1304 If the frame we're sniffing for is a signal frame whose start
1305 address is placed on the stack by the OS, its FDE must
1306 extend one byte before its start address or we could potentially
1307 select the FDE of the previous function. */
1308 CORE_ADDR block_addr = get_frame_address_in_block (this_frame);
1309 struct dwarf2_fde *fde = dwarf2_frame_find_fde (&block_addr, NULL);
1314 /* On some targets, signal trampolines may have unwind information.
1315 We need to recognize them so that we set the frame type
1318 if (fde->cie->signal_frame
1319 || dwarf2_frame_signal_frame_p (get_frame_arch (this_frame),
1321 return self->type == SIGTRAMP_FRAME;
1323 return self->type != SIGTRAMP_FRAME;
1326 static const struct frame_unwind dwarf2_frame_unwind =
1329 dwarf2_frame_unwind_stop_reason,
1330 dwarf2_frame_this_id,
1331 dwarf2_frame_prev_register,
1333 dwarf2_frame_sniffer
1336 static const struct frame_unwind dwarf2_signal_frame_unwind =
1339 dwarf2_frame_unwind_stop_reason,
1340 dwarf2_frame_this_id,
1341 dwarf2_frame_prev_register,
1343 dwarf2_frame_sniffer
1346 /* Append the DWARF-2 frame unwinders to GDBARCH's list. */
1349 dwarf2_append_unwinders (struct gdbarch *gdbarch)
1351 frame_unwind_append_unwinder (gdbarch, &dwarf2_frame_unwind);
1352 frame_unwind_append_unwinder (gdbarch, &dwarf2_signal_frame_unwind);
1356 /* There is no explicitly defined relationship between the CFA and the
1357 location of frame's local variables and arguments/parameters.
1358 Therefore, frame base methods on this page should probably only be
1359 used as a last resort, just to avoid printing total garbage as a
1360 response to the "info frame" command. */
1363 dwarf2_frame_base_address (struct frame_info *this_frame, void **this_cache)
1365 struct dwarf2_frame_cache *cache =
1366 dwarf2_frame_cache (this_frame, this_cache);
1371 static const struct frame_base dwarf2_frame_base =
1373 &dwarf2_frame_unwind,
1374 dwarf2_frame_base_address,
1375 dwarf2_frame_base_address,
1376 dwarf2_frame_base_address
1379 const struct frame_base *
1380 dwarf2_frame_base_sniffer (struct frame_info *this_frame)
1382 CORE_ADDR block_addr = get_frame_address_in_block (this_frame);
1384 if (dwarf2_frame_find_fde (&block_addr, NULL))
1385 return &dwarf2_frame_base;
1390 /* Compute the CFA for THIS_FRAME, but only if THIS_FRAME came from
1391 the DWARF unwinder. This is used to implement
1392 DW_OP_call_frame_cfa. */
1395 dwarf2_frame_cfa (struct frame_info *this_frame)
1397 while (get_frame_type (this_frame) == INLINE_FRAME)
1398 this_frame = get_prev_frame (this_frame);
1399 /* This restriction could be lifted if other unwinders are known to
1400 compute the frame base in a way compatible with the DWARF
1402 if (! frame_unwinder_is (this_frame, &dwarf2_frame_unwind))
1403 error (_("can't compute CFA for this frame"));
1404 return get_frame_base (this_frame);
1407 const struct objfile_data *dwarf2_frame_objfile_data;
1410 read_1_byte (bfd *abfd, gdb_byte *buf)
1412 return bfd_get_8 (abfd, buf);
1416 read_4_bytes (bfd *abfd, gdb_byte *buf)
1418 return bfd_get_32 (abfd, buf);
1422 read_8_bytes (bfd *abfd, gdb_byte *buf)
1424 return bfd_get_64 (abfd, buf);
1428 read_unsigned_leb128 (bfd *abfd, gdb_byte *buf, unsigned int *bytes_read_ptr)
1431 unsigned int num_read;
1441 byte = bfd_get_8 (abfd, (bfd_byte *) buf);
1444 result |= ((byte & 0x7f) << shift);
1447 while (byte & 0x80);
1449 *bytes_read_ptr = num_read;
1455 read_signed_leb128 (bfd *abfd, gdb_byte *buf, unsigned int *bytes_read_ptr)
1459 unsigned int num_read;
1468 byte = bfd_get_8 (abfd, (bfd_byte *) buf);
1471 result |= ((byte & 0x7f) << shift);
1474 while (byte & 0x80);
1476 if (shift < 8 * sizeof (result) && (byte & 0x40))
1477 result |= -(((LONGEST)1) << shift);
1479 *bytes_read_ptr = num_read;
1485 read_initial_length (bfd *abfd, gdb_byte *buf, unsigned int *bytes_read_ptr)
1489 result = bfd_get_32 (abfd, buf);
1490 if (result == 0xffffffff)
1492 result = bfd_get_64 (abfd, buf + 4);
1493 *bytes_read_ptr = 12;
1496 *bytes_read_ptr = 4;
1502 /* Pointer encoding helper functions. */
1504 /* GCC supports exception handling based on DWARF2 CFI. However, for
1505 technical reasons, it encodes addresses in its FDE's in a different
1506 way. Several "pointer encodings" are supported. The encoding
1507 that's used for a particular FDE is determined by the 'R'
1508 augmentation in the associated CIE. The argument of this
1509 augmentation is a single byte.
1511 The address can be encoded as 2 bytes, 4 bytes, 8 bytes, or as a
1512 LEB128. This is encoded in bits 0, 1 and 2. Bit 3 encodes whether
1513 the address is signed or unsigned. Bits 4, 5 and 6 encode how the
1514 address should be interpreted (absolute, relative to the current
1515 position in the FDE, ...). Bit 7, indicates that the address
1516 should be dereferenced. */
1519 encoding_for_size (unsigned int size)
1524 return DW_EH_PE_udata2;
1526 return DW_EH_PE_udata4;
1528 return DW_EH_PE_udata8;
1530 internal_error (__FILE__, __LINE__, _("Unsupported address size"));
1535 read_encoded_value (struct comp_unit *unit, gdb_byte encoding,
1536 int ptr_len, const gdb_byte *buf,
1537 unsigned int *bytes_read_ptr,
1538 CORE_ADDR func_base)
1543 /* GCC currently doesn't generate DW_EH_PE_indirect encodings for
1545 if (encoding & DW_EH_PE_indirect)
1546 internal_error (__FILE__, __LINE__,
1547 _("Unsupported encoding: DW_EH_PE_indirect"));
1549 *bytes_read_ptr = 0;
1551 switch (encoding & 0x70)
1553 case DW_EH_PE_absptr:
1556 case DW_EH_PE_pcrel:
1557 base = bfd_get_section_vma (unit->abfd, unit->dwarf_frame_section);
1558 base += (buf - unit->dwarf_frame_buffer);
1560 case DW_EH_PE_datarel:
1563 case DW_EH_PE_textrel:
1566 case DW_EH_PE_funcrel:
1569 case DW_EH_PE_aligned:
1571 offset = buf - unit->dwarf_frame_buffer;
1572 if ((offset % ptr_len) != 0)
1574 *bytes_read_ptr = ptr_len - (offset % ptr_len);
1575 buf += *bytes_read_ptr;
1579 internal_error (__FILE__, __LINE__,
1580 _("Invalid or unsupported encoding"));
1583 if ((encoding & 0x07) == 0x00)
1585 encoding |= encoding_for_size (ptr_len);
1586 if (bfd_get_sign_extend_vma (unit->abfd))
1587 encoding |= DW_EH_PE_signed;
1590 switch (encoding & 0x0f)
1592 case DW_EH_PE_uleb128:
1595 const gdb_byte *end_buf = buf + (sizeof (value) + 1) * 8 / 7;
1597 *bytes_read_ptr += read_uleb128 (buf, end_buf, &value) - buf;
1598 return base + value;
1600 case DW_EH_PE_udata2:
1601 *bytes_read_ptr += 2;
1602 return (base + bfd_get_16 (unit->abfd, (bfd_byte *) buf));
1603 case DW_EH_PE_udata4:
1604 *bytes_read_ptr += 4;
1605 return (base + bfd_get_32 (unit->abfd, (bfd_byte *) buf));
1606 case DW_EH_PE_udata8:
1607 *bytes_read_ptr += 8;
1608 return (base + bfd_get_64 (unit->abfd, (bfd_byte *) buf));
1609 case DW_EH_PE_sleb128:
1612 const gdb_byte *end_buf = buf + (sizeof (value) + 1) * 8 / 7;
1614 *bytes_read_ptr += read_sleb128 (buf, end_buf, &value) - buf;
1615 return base + value;
1617 case DW_EH_PE_sdata2:
1618 *bytes_read_ptr += 2;
1619 return (base + bfd_get_signed_16 (unit->abfd, (bfd_byte *) buf));
1620 case DW_EH_PE_sdata4:
1621 *bytes_read_ptr += 4;
1622 return (base + bfd_get_signed_32 (unit->abfd, (bfd_byte *) buf));
1623 case DW_EH_PE_sdata8:
1624 *bytes_read_ptr += 8;
1625 return (base + bfd_get_signed_64 (unit->abfd, (bfd_byte *) buf));
1627 internal_error (__FILE__, __LINE__,
1628 _("Invalid or unsupported encoding"));
1634 bsearch_cie_cmp (const void *key, const void *element)
1636 ULONGEST cie_pointer = *(ULONGEST *) key;
1637 struct dwarf2_cie *cie = *(struct dwarf2_cie **) element;
1639 if (cie_pointer == cie->cie_pointer)
1642 return (cie_pointer < cie->cie_pointer) ? -1 : 1;
1645 /* Find CIE with the given CIE_POINTER in CIE_TABLE. */
1646 static struct dwarf2_cie *
1647 find_cie (struct dwarf2_cie_table *cie_table, ULONGEST cie_pointer)
1649 struct dwarf2_cie **p_cie;
1651 /* The C standard (ISO/IEC 9899:TC2) requires the BASE argument to
1652 bsearch be non-NULL. */
1653 if (cie_table->entries == NULL)
1655 gdb_assert (cie_table->num_entries == 0);
1659 p_cie = bsearch (&cie_pointer, cie_table->entries, cie_table->num_entries,
1660 sizeof (cie_table->entries[0]), bsearch_cie_cmp);
1666 /* Add a pointer to new CIE to the CIE_TABLE, allocating space for it. */
1668 add_cie (struct dwarf2_cie_table *cie_table, struct dwarf2_cie *cie)
1670 const int n = cie_table->num_entries;
1673 || cie_table->entries[n - 1]->cie_pointer < cie->cie_pointer);
1675 cie_table->entries =
1676 xrealloc (cie_table->entries, (n + 1) * sizeof (cie_table->entries[0]));
1677 cie_table->entries[n] = cie;
1678 cie_table->num_entries = n + 1;
1682 bsearch_fde_cmp (const void *key, const void *element)
1684 CORE_ADDR seek_pc = *(CORE_ADDR *) key;
1685 struct dwarf2_fde *fde = *(struct dwarf2_fde **) element;
1687 if (seek_pc < fde->initial_location)
1689 if (seek_pc < fde->initial_location + fde->address_range)
1694 /* Find the FDE for *PC. Return a pointer to the FDE, and store the
1695 inital location associated with it into *PC. */
1697 static struct dwarf2_fde *
1698 dwarf2_frame_find_fde (CORE_ADDR *pc, CORE_ADDR *out_offset)
1700 struct objfile *objfile;
1702 ALL_OBJFILES (objfile)
1704 struct dwarf2_fde_table *fde_table;
1705 struct dwarf2_fde **p_fde;
1709 fde_table = objfile_data (objfile, dwarf2_frame_objfile_data);
1710 if (fde_table == NULL)
1712 dwarf2_build_frame_info (objfile);
1713 fde_table = objfile_data (objfile, dwarf2_frame_objfile_data);
1715 gdb_assert (fde_table != NULL);
1717 if (fde_table->num_entries == 0)
1720 gdb_assert (objfile->section_offsets);
1721 offset = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
1723 gdb_assert (fde_table->num_entries > 0);
1724 if (*pc < offset + fde_table->entries[0]->initial_location)
1727 seek_pc = *pc - offset;
1728 p_fde = bsearch (&seek_pc, fde_table->entries, fde_table->num_entries,
1729 sizeof (fde_table->entries[0]), bsearch_fde_cmp);
1732 *pc = (*p_fde)->initial_location + offset;
1734 *out_offset = offset;
1741 /* Add a pointer to new FDE to the FDE_TABLE, allocating space for it. */
1743 add_fde (struct dwarf2_fde_table *fde_table, struct dwarf2_fde *fde)
1745 if (fde->address_range == 0)
1746 /* Discard useless FDEs. */
1749 fde_table->num_entries += 1;
1750 fde_table->entries =
1751 xrealloc (fde_table->entries,
1752 fde_table->num_entries * sizeof (fde_table->entries[0]));
1753 fde_table->entries[fde_table->num_entries - 1] = fde;
1756 #ifdef CC_HAS_LONG_LONG
1757 #define DW64_CIE_ID 0xffffffffffffffffULL
1759 #define DW64_CIE_ID ~0
1762 /* Defines the type of eh_frames that are expected to be decoded: CIE, FDE
1767 EH_CIE_TYPE_ID = 1 << 0,
1768 EH_FDE_TYPE_ID = 1 << 1,
1769 EH_CIE_OR_FDE_TYPE_ID = EH_CIE_TYPE_ID | EH_FDE_TYPE_ID
1772 static gdb_byte *decode_frame_entry (struct comp_unit *unit, gdb_byte *start,
1774 struct dwarf2_cie_table *cie_table,
1775 struct dwarf2_fde_table *fde_table,
1776 enum eh_frame_type entry_type);
1778 /* Decode the next CIE or FDE, entry_type specifies the expected type.
1779 Return NULL if invalid input, otherwise the next byte to be processed. */
1782 decode_frame_entry_1 (struct comp_unit *unit, gdb_byte *start, int eh_frame_p,
1783 struct dwarf2_cie_table *cie_table,
1784 struct dwarf2_fde_table *fde_table,
1785 enum eh_frame_type entry_type)
1787 struct gdbarch *gdbarch = get_objfile_arch (unit->objfile);
1788 gdb_byte *buf, *end;
1790 unsigned int bytes_read;
1793 ULONGEST cie_pointer;
1796 length = read_initial_length (unit->abfd, buf, &bytes_read);
1800 /* Are we still within the section? */
1801 if (end > unit->dwarf_frame_buffer + unit->dwarf_frame_size)
1807 /* Distinguish between 32 and 64-bit encoded frame info. */
1808 dwarf64_p = (bytes_read == 12);
1810 /* In a .eh_frame section, zero is used to distinguish CIEs from FDEs. */
1814 cie_id = DW64_CIE_ID;
1820 cie_pointer = read_8_bytes (unit->abfd, buf);
1825 cie_pointer = read_4_bytes (unit->abfd, buf);
1829 if (cie_pointer == cie_id)
1831 /* This is a CIE. */
1832 struct dwarf2_cie *cie;
1834 unsigned int cie_version;
1836 /* Check that a CIE was expected. */
1837 if ((entry_type & EH_CIE_TYPE_ID) == 0)
1838 error (_("Found a CIE when not expecting it."));
1840 /* Record the offset into the .debug_frame section of this CIE. */
1841 cie_pointer = start - unit->dwarf_frame_buffer;
1843 /* Check whether we've already read it. */
1844 if (find_cie (cie_table, cie_pointer))
1847 cie = (struct dwarf2_cie *)
1848 obstack_alloc (&unit->objfile->objfile_obstack,
1849 sizeof (struct dwarf2_cie));
1850 cie->initial_instructions = NULL;
1851 cie->cie_pointer = cie_pointer;
1853 /* The encoding for FDE's in a normal .debug_frame section
1854 depends on the target address size. */
1855 cie->encoding = DW_EH_PE_absptr;
1857 /* We'll determine the final value later, but we need to
1858 initialize it conservatively. */
1859 cie->signal_frame = 0;
1861 /* Check version number. */
1862 cie_version = read_1_byte (unit->abfd, buf);
1863 if (cie_version != 1 && cie_version != 3 && cie_version != 4)
1865 cie->version = cie_version;
1868 /* Interpret the interesting bits of the augmentation. */
1869 cie->augmentation = augmentation = (char *) buf;
1870 buf += (strlen (augmentation) + 1);
1872 /* Ignore armcc augmentations. We only use them for quirks,
1873 and that doesn't happen until later. */
1874 if (strncmp (augmentation, "armcc", 5) == 0)
1875 augmentation += strlen (augmentation);
1877 /* The GCC 2.x "eh" augmentation has a pointer immediately
1878 following the augmentation string, so it must be handled
1880 if (augmentation[0] == 'e' && augmentation[1] == 'h')
1883 buf += gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT;
1887 if (cie->version >= 4)
1889 /* FIXME: check that this is the same as from the CU header. */
1890 cie->addr_size = read_1_byte (unit->abfd, buf);
1892 cie->segment_size = read_1_byte (unit->abfd, buf);
1897 cie->addr_size = gdbarch_dwarf2_addr_size (gdbarch);
1898 cie->segment_size = 0;
1900 /* Address values in .eh_frame sections are defined to have the
1901 target's pointer size. Watchout: This breaks frame info for
1902 targets with pointer size < address size, unless a .debug_frame
1903 section exists as well. */
1905 cie->ptr_size = gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT;
1907 cie->ptr_size = cie->addr_size;
1909 cie->code_alignment_factor =
1910 read_unsigned_leb128 (unit->abfd, buf, &bytes_read);
1913 cie->data_alignment_factor =
1914 read_signed_leb128 (unit->abfd, buf, &bytes_read);
1917 if (cie_version == 1)
1919 cie->return_address_register = read_1_byte (unit->abfd, buf);
1923 cie->return_address_register = read_unsigned_leb128 (unit->abfd, buf,
1925 cie->return_address_register
1926 = dwarf2_frame_adjust_regnum (gdbarch,
1927 cie->return_address_register,
1932 cie->saw_z_augmentation = (*augmentation == 'z');
1933 if (cie->saw_z_augmentation)
1937 length = read_unsigned_leb128 (unit->abfd, buf, &bytes_read);
1941 cie->initial_instructions = buf + length;
1945 while (*augmentation)
1947 /* "L" indicates a byte showing how the LSDA pointer is encoded. */
1948 if (*augmentation == 'L')
1955 /* "R" indicates a byte indicating how FDE addresses are encoded. */
1956 else if (*augmentation == 'R')
1958 cie->encoding = *buf++;
1962 /* "P" indicates a personality routine in the CIE augmentation. */
1963 else if (*augmentation == 'P')
1965 /* Skip. Avoid indirection since we throw away the result. */
1966 gdb_byte encoding = (*buf++) & ~DW_EH_PE_indirect;
1967 read_encoded_value (unit, encoding, cie->ptr_size,
1968 buf, &bytes_read, 0);
1973 /* "S" indicates a signal frame, such that the return
1974 address must not be decremented to locate the call frame
1975 info for the previous frame; it might even be the first
1976 instruction of a function, so decrementing it would take
1977 us to a different function. */
1978 else if (*augmentation == 'S')
1980 cie->signal_frame = 1;
1984 /* Otherwise we have an unknown augmentation. Assume that either
1985 there is no augmentation data, or we saw a 'z' prefix. */
1988 if (cie->initial_instructions)
1989 buf = cie->initial_instructions;
1994 cie->initial_instructions = buf;
1998 add_cie (cie_table, cie);
2002 /* This is a FDE. */
2003 struct dwarf2_fde *fde;
2005 /* Check that an FDE was expected. */
2006 if ((entry_type & EH_FDE_TYPE_ID) == 0)
2007 error (_("Found an FDE when not expecting it."));
2009 /* In an .eh_frame section, the CIE pointer is the delta between the
2010 address within the FDE where the CIE pointer is stored and the
2011 address of the CIE. Convert it to an offset into the .eh_frame
2015 cie_pointer = buf - unit->dwarf_frame_buffer - cie_pointer;
2016 cie_pointer -= (dwarf64_p ? 8 : 4);
2019 /* In either case, validate the result is still within the section. */
2020 if (cie_pointer >= unit->dwarf_frame_size)
2023 fde = (struct dwarf2_fde *)
2024 obstack_alloc (&unit->objfile->objfile_obstack,
2025 sizeof (struct dwarf2_fde));
2026 fde->cie = find_cie (cie_table, cie_pointer);
2027 if (fde->cie == NULL)
2029 decode_frame_entry (unit, unit->dwarf_frame_buffer + cie_pointer,
2030 eh_frame_p, cie_table, fde_table,
2032 fde->cie = find_cie (cie_table, cie_pointer);
2035 gdb_assert (fde->cie != NULL);
2037 fde->initial_location =
2038 read_encoded_value (unit, fde->cie->encoding, fde->cie->ptr_size,
2039 buf, &bytes_read, 0);
2042 fde->address_range =
2043 read_encoded_value (unit, fde->cie->encoding & 0x0f,
2044 fde->cie->ptr_size, buf, &bytes_read, 0);
2047 /* A 'z' augmentation in the CIE implies the presence of an
2048 augmentation field in the FDE as well. The only thing known
2049 to be in here at present is the LSDA entry for EH. So we
2050 can skip the whole thing. */
2051 if (fde->cie->saw_z_augmentation)
2055 length = read_unsigned_leb128 (unit->abfd, buf, &bytes_read);
2056 buf += bytes_read + length;
2061 fde->instructions = buf;
2064 fde->eh_frame_p = eh_frame_p;
2066 add_fde (fde_table, fde);
2072 /* Read a CIE or FDE in BUF and decode it. Entry_type specifies whether we
2073 expect an FDE or a CIE. */
2076 decode_frame_entry (struct comp_unit *unit, gdb_byte *start, int eh_frame_p,
2077 struct dwarf2_cie_table *cie_table,
2078 struct dwarf2_fde_table *fde_table,
2079 enum eh_frame_type entry_type)
2081 enum { NONE, ALIGN4, ALIGN8, FAIL } workaround = NONE;
2083 ptrdiff_t start_offset;
2087 ret = decode_frame_entry_1 (unit, start, eh_frame_p,
2088 cie_table, fde_table, entry_type);
2092 /* We have corrupt input data of some form. */
2094 /* ??? Try, weakly, to work around compiler/assembler/linker bugs
2095 and mismatches wrt padding and alignment of debug sections. */
2096 /* Note that there is no requirement in the standard for any
2097 alignment at all in the frame unwind sections. Testing for
2098 alignment before trying to interpret data would be incorrect.
2100 However, GCC traditionally arranged for frame sections to be
2101 sized such that the FDE length and CIE fields happen to be
2102 aligned (in theory, for performance). This, unfortunately,
2103 was done with .align directives, which had the side effect of
2104 forcing the section to be aligned by the linker.
2106 This becomes a problem when you have some other producer that
2107 creates frame sections that are not as strictly aligned. That
2108 produces a hole in the frame info that gets filled by the
2111 The GCC behaviour is arguably a bug, but it's effectively now
2112 part of the ABI, so we're now stuck with it, at least at the
2113 object file level. A smart linker may decide, in the process
2114 of compressing duplicate CIE information, that it can rewrite
2115 the entire output section without this extra padding. */
2117 start_offset = start - unit->dwarf_frame_buffer;
2118 if (workaround < ALIGN4 && (start_offset & 3) != 0)
2120 start += 4 - (start_offset & 3);
2121 workaround = ALIGN4;
2124 if (workaround < ALIGN8 && (start_offset & 7) != 0)
2126 start += 8 - (start_offset & 7);
2127 workaround = ALIGN8;
2131 /* Nothing left to try. Arrange to return as if we've consumed
2132 the entire input section. Hopefully we'll get valid info from
2133 the other of .debug_frame/.eh_frame. */
2135 ret = unit->dwarf_frame_buffer + unit->dwarf_frame_size;
2145 complaint (&symfile_complaints, _("\
2146 Corrupt data in %s:%s; align 4 workaround apparently succeeded"),
2147 unit->dwarf_frame_section->owner->filename,
2148 unit->dwarf_frame_section->name);
2152 complaint (&symfile_complaints, _("\
2153 Corrupt data in %s:%s; align 8 workaround apparently succeeded"),
2154 unit->dwarf_frame_section->owner->filename,
2155 unit->dwarf_frame_section->name);
2159 complaint (&symfile_complaints,
2160 _("Corrupt data in %s:%s"),
2161 unit->dwarf_frame_section->owner->filename,
2162 unit->dwarf_frame_section->name);
2170 qsort_fde_cmp (const void *a, const void *b)
2172 struct dwarf2_fde *aa = *(struct dwarf2_fde **)a;
2173 struct dwarf2_fde *bb = *(struct dwarf2_fde **)b;
2175 if (aa->initial_location == bb->initial_location)
2177 if (aa->address_range != bb->address_range
2178 && aa->eh_frame_p == 0 && bb->eh_frame_p == 0)
2179 /* Linker bug, e.g. gold/10400.
2180 Work around it by keeping stable sort order. */
2181 return (a < b) ? -1 : 1;
2183 /* Put eh_frame entries after debug_frame ones. */
2184 return aa->eh_frame_p - bb->eh_frame_p;
2187 return (aa->initial_location < bb->initial_location) ? -1 : 1;
2191 dwarf2_build_frame_info (struct objfile *objfile)
2193 struct comp_unit *unit;
2194 gdb_byte *frame_ptr;
2195 struct dwarf2_cie_table cie_table;
2196 struct dwarf2_fde_table fde_table;
2197 struct dwarf2_fde_table *fde_table2;
2198 volatile struct gdb_exception e;
2200 cie_table.num_entries = 0;
2201 cie_table.entries = NULL;
2203 fde_table.num_entries = 0;
2204 fde_table.entries = NULL;
2206 /* Build a minimal decoding of the DWARF2 compilation unit. */
2207 unit = (struct comp_unit *) obstack_alloc (&objfile->objfile_obstack,
2208 sizeof (struct comp_unit));
2209 unit->abfd = objfile->obfd;
2210 unit->objfile = objfile;
2214 if (objfile->separate_debug_objfile_backlink == NULL)
2216 /* Do not read .eh_frame from separate file as they must be also
2217 present in the main file. */
2218 dwarf2_get_section_info (objfile, DWARF2_EH_FRAME,
2219 &unit->dwarf_frame_section,
2220 &unit->dwarf_frame_buffer,
2221 &unit->dwarf_frame_size);
2222 if (unit->dwarf_frame_size)
2224 asection *got, *txt;
2226 /* FIXME: kettenis/20030602: This is the DW_EH_PE_datarel base
2227 that is used for the i386/amd64 target, which currently is
2228 the only target in GCC that supports/uses the
2229 DW_EH_PE_datarel encoding. */
2230 got = bfd_get_section_by_name (unit->abfd, ".got");
2232 unit->dbase = got->vma;
2234 /* GCC emits the DW_EH_PE_textrel encoding type on sh and ia64
2236 txt = bfd_get_section_by_name (unit->abfd, ".text");
2238 unit->tbase = txt->vma;
2240 TRY_CATCH (e, RETURN_MASK_ERROR)
2242 frame_ptr = unit->dwarf_frame_buffer;
2243 while (frame_ptr < unit->dwarf_frame_buffer + unit->dwarf_frame_size)
2244 frame_ptr = decode_frame_entry (unit, frame_ptr, 1,
2245 &cie_table, &fde_table,
2246 EH_CIE_OR_FDE_TYPE_ID);
2251 warning (_("skipping .eh_frame info of %s: %s"),
2252 objfile->name, e.message);
2254 if (fde_table.num_entries != 0)
2256 xfree (fde_table.entries);
2257 fde_table.entries = NULL;
2258 fde_table.num_entries = 0;
2260 /* The cie_table is discarded by the next if. */
2263 if (cie_table.num_entries != 0)
2265 /* Reinit cie_table: debug_frame has different CIEs. */
2266 xfree (cie_table.entries);
2267 cie_table.num_entries = 0;
2268 cie_table.entries = NULL;
2273 dwarf2_get_section_info (objfile, DWARF2_DEBUG_FRAME,
2274 &unit->dwarf_frame_section,
2275 &unit->dwarf_frame_buffer,
2276 &unit->dwarf_frame_size);
2277 if (unit->dwarf_frame_size)
2279 int num_old_fde_entries = fde_table.num_entries;
2281 TRY_CATCH (e, RETURN_MASK_ERROR)
2283 frame_ptr = unit->dwarf_frame_buffer;
2284 while (frame_ptr < unit->dwarf_frame_buffer + unit->dwarf_frame_size)
2285 frame_ptr = decode_frame_entry (unit, frame_ptr, 0,
2286 &cie_table, &fde_table,
2287 EH_CIE_OR_FDE_TYPE_ID);
2291 warning (_("skipping .debug_frame info of %s: %s"),
2292 objfile->name, e.message);
2294 if (fde_table.num_entries != 0)
2296 fde_table.num_entries = num_old_fde_entries;
2297 if (num_old_fde_entries == 0)
2299 xfree (fde_table.entries);
2300 fde_table.entries = NULL;
2304 fde_table.entries = xrealloc (fde_table.entries,
2305 fde_table.num_entries *
2306 sizeof (fde_table.entries[0]));
2309 fde_table.num_entries = num_old_fde_entries;
2310 /* The cie_table is discarded by the next if. */
2314 /* Discard the cie_table, it is no longer needed. */
2315 if (cie_table.num_entries != 0)
2317 xfree (cie_table.entries);
2318 cie_table.entries = NULL; /* Paranoia. */
2319 cie_table.num_entries = 0; /* Paranoia. */
2322 /* Copy fde_table to obstack: it is needed at runtime. */
2323 fde_table2 = (struct dwarf2_fde_table *)
2324 obstack_alloc (&objfile->objfile_obstack, sizeof (*fde_table2));
2326 if (fde_table.num_entries == 0)
2328 fde_table2->entries = NULL;
2329 fde_table2->num_entries = 0;
2333 struct dwarf2_fde *fde_prev = NULL;
2334 struct dwarf2_fde *first_non_zero_fde = NULL;
2337 /* Prepare FDE table for lookups. */
2338 qsort (fde_table.entries, fde_table.num_entries,
2339 sizeof (fde_table.entries[0]), qsort_fde_cmp);
2341 /* Check for leftovers from --gc-sections. The GNU linker sets
2342 the relevant symbols to zero, but doesn't zero the FDE *end*
2343 ranges because there's no relocation there. It's (offset,
2344 length), not (start, end). On targets where address zero is
2345 just another valid address this can be a problem, since the
2346 FDEs appear to be non-empty in the output --- we could pick
2347 out the wrong FDE. To work around this, when overlaps are
2348 detected, we prefer FDEs that do not start at zero.
2350 Start by finding the first FDE with non-zero start. Below
2351 we'll discard all FDEs that start at zero and overlap this
2353 for (i = 0; i < fde_table.num_entries; i++)
2355 struct dwarf2_fde *fde = fde_table.entries[i];
2357 if (fde->initial_location != 0)
2359 first_non_zero_fde = fde;
2364 /* Since we'll be doing bsearch, squeeze out identical (except
2365 for eh_frame_p) fde entries so bsearch result is predictable.
2366 Also discard leftovers from --gc-sections. */
2367 fde_table2->num_entries = 0;
2368 for (i = 0; i < fde_table.num_entries; i++)
2370 struct dwarf2_fde *fde = fde_table.entries[i];
2372 if (fde->initial_location == 0
2373 && first_non_zero_fde != NULL
2374 && (first_non_zero_fde->initial_location
2375 < fde->initial_location + fde->address_range))
2378 if (fde_prev != NULL
2379 && fde_prev->initial_location == fde->initial_location)
2382 obstack_grow (&objfile->objfile_obstack, &fde_table.entries[i],
2383 sizeof (fde_table.entries[0]));
2384 ++fde_table2->num_entries;
2387 fde_table2->entries = obstack_finish (&objfile->objfile_obstack);
2389 /* Discard the original fde_table. */
2390 xfree (fde_table.entries);
2393 set_objfile_data (objfile, dwarf2_frame_objfile_data, fde_table2);
2396 /* Provide a prototype to silence -Wmissing-prototypes. */
2397 void _initialize_dwarf2_frame (void);
2400 _initialize_dwarf2_frame (void)
2402 dwarf2_frame_data = gdbarch_data_register_pre_init (dwarf2_frame_init);
2403 dwarf2_frame_objfile_data = register_objfile_data ();