* sim/cris/hw/rv-n-cris/irq6.ms: New test.
[platform/upstream/binutils.git] / gdb / dwarf2-frame.c
1 /* Frame unwinder for frames with DWARF Call Frame Information.
2
3    Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
4
5    Contributed by Mark Kettenis.
6
7    This file is part of GDB.
8
9    This program is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation; either version 2 of the License, or
12    (at your option) any later version.
13
14    This program is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18
19    You should have received a copy of the GNU General Public License
20    along with this program; if not, write to the Free Software
21    Foundation, Inc., 51 Franklin Street, Fifth Floor,
22    Boston, MA 02110-1301, USA.  */
23
24 #include "defs.h"
25 #include "dwarf2expr.h"
26 #include "elf/dwarf2.h"
27 #include "frame.h"
28 #include "frame-base.h"
29 #include "frame-unwind.h"
30 #include "gdbcore.h"
31 #include "gdbtypes.h"
32 #include "symtab.h"
33 #include "objfiles.h"
34 #include "regcache.h"
35
36 #include "gdb_assert.h"
37 #include "gdb_string.h"
38
39 #include "complaints.h"
40 #include "dwarf2-frame.h"
41
42 /* Call Frame Information (CFI).  */
43
44 /* Common Information Entry (CIE).  */
45
46 struct dwarf2_cie
47 {
48   /* Offset into the .debug_frame section where this CIE was found.
49      Used to identify this CIE.  */
50   ULONGEST cie_pointer;
51
52   /* Constant that is factored out of all advance location
53      instructions.  */
54   ULONGEST code_alignment_factor;
55
56   /* Constants that is factored out of all offset instructions.  */
57   LONGEST data_alignment_factor;
58
59   /* Return address column.  */
60   ULONGEST return_address_register;
61
62   /* Instruction sequence to initialize a register set.  */
63   gdb_byte *initial_instructions;
64   gdb_byte *end;
65
66   /* Encoding of addresses.  */
67   gdb_byte encoding;
68
69   /* True if a 'z' augmentation existed.  */
70   unsigned char saw_z_augmentation;
71
72   struct dwarf2_cie *next;
73 };
74
75 /* Frame Description Entry (FDE).  */
76
77 struct dwarf2_fde
78 {
79   /* CIE for this FDE.  */
80   struct dwarf2_cie *cie;
81
82   /* First location associated with this FDE.  */
83   CORE_ADDR initial_location;
84
85   /* Number of bytes of program instructions described by this FDE.  */
86   CORE_ADDR address_range;
87
88   /* Instruction sequence.  */
89   gdb_byte *instructions;
90   gdb_byte *end;
91
92   struct dwarf2_fde *next;
93 };
94
95 static struct dwarf2_fde *dwarf2_frame_find_fde (CORE_ADDR *pc);
96 \f
97
98 /* Structure describing a frame state.  */
99
100 struct dwarf2_frame_state
101 {
102   /* Each register save state can be described in terms of a CFA slot,
103      another register, or a location expression.  */
104   struct dwarf2_frame_state_reg_info
105   {
106     struct dwarf2_frame_state_reg *reg;
107     int num_regs;
108
109     /* Used to implement DW_CFA_remember_state.  */
110     struct dwarf2_frame_state_reg_info *prev;
111   } regs;
112
113   LONGEST cfa_offset;
114   ULONGEST cfa_reg;
115   gdb_byte *cfa_exp;
116   enum {
117     CFA_UNSET,
118     CFA_REG_OFFSET,
119     CFA_EXP
120   } cfa_how;
121
122   /* The PC described by the current frame state.  */
123   CORE_ADDR pc;
124
125   /* Initial register set from the CIE.
126      Used to implement DW_CFA_restore.  */
127   struct dwarf2_frame_state_reg_info initial;
128
129   /* The information we care about from the CIE.  */
130   LONGEST data_align;
131   ULONGEST code_align;
132   ULONGEST retaddr_column;
133 };
134
135 /* Store the length the expression for the CFA in the `cfa_reg' field,
136    which is unused in that case.  */
137 #define cfa_exp_len cfa_reg
138
139 /* Assert that the register set RS is large enough to store NUM_REGS
140    columns.  If necessary, enlarge the register set.  */
141
142 static void
143 dwarf2_frame_state_alloc_regs (struct dwarf2_frame_state_reg_info *rs,
144                                int num_regs)
145 {
146   size_t size = sizeof (struct dwarf2_frame_state_reg);
147
148   if (num_regs <= rs->num_regs)
149     return;
150
151   rs->reg = (struct dwarf2_frame_state_reg *)
152     xrealloc (rs->reg, num_regs * size);
153
154   /* Initialize newly allocated registers.  */
155   memset (rs->reg + rs->num_regs, 0, (num_regs - rs->num_regs) * size);
156   rs->num_regs = num_regs;
157 }
158
159 /* Copy the register columns in register set RS into newly allocated
160    memory and return a pointer to this newly created copy.  */
161
162 static struct dwarf2_frame_state_reg *
163 dwarf2_frame_state_copy_regs (struct dwarf2_frame_state_reg_info *rs)
164 {
165   size_t size = rs->num_regs * sizeof (struct dwarf2_frame_state_reg);
166   struct dwarf2_frame_state_reg *reg;
167
168   reg = (struct dwarf2_frame_state_reg *) xmalloc (size);
169   memcpy (reg, rs->reg, size);
170
171   return reg;
172 }
173
174 /* Release the memory allocated to register set RS.  */
175
176 static void
177 dwarf2_frame_state_free_regs (struct dwarf2_frame_state_reg_info *rs)
178 {
179   if (rs)
180     {
181       dwarf2_frame_state_free_regs (rs->prev);
182
183       xfree (rs->reg);
184       xfree (rs);
185     }
186 }
187
188 /* Release the memory allocated to the frame state FS.  */
189
190 static void
191 dwarf2_frame_state_free (void *p)
192 {
193   struct dwarf2_frame_state *fs = p;
194
195   dwarf2_frame_state_free_regs (fs->initial.prev);
196   dwarf2_frame_state_free_regs (fs->regs.prev);
197   xfree (fs->initial.reg);
198   xfree (fs->regs.reg);
199   xfree (fs);
200 }
201 \f
202
203 /* Helper functions for execute_stack_op.  */
204
205 static CORE_ADDR
206 read_reg (void *baton, int reg)
207 {
208   struct frame_info *next_frame = (struct frame_info *) baton;
209   struct gdbarch *gdbarch = get_frame_arch (next_frame);
210   int regnum;
211   gdb_byte *buf;
212
213   regnum = DWARF2_REG_TO_REGNUM (reg);
214
215   buf = alloca (register_size (gdbarch, regnum));
216   frame_unwind_register (next_frame, regnum, buf);
217   return extract_typed_address (buf, builtin_type_void_data_ptr);
218 }
219
220 static void
221 read_mem (void *baton, gdb_byte *buf, CORE_ADDR addr, size_t len)
222 {
223   read_memory (addr, buf, len);
224 }
225
226 static void
227 no_get_frame_base (void *baton, gdb_byte **start, size_t *length)
228 {
229   internal_error (__FILE__, __LINE__,
230                   _("Support for DW_OP_fbreg is unimplemented"));
231 }
232
233 static CORE_ADDR
234 no_get_tls_address (void *baton, CORE_ADDR offset)
235 {
236   internal_error (__FILE__, __LINE__,
237                   _("Support for DW_OP_GNU_push_tls_address is unimplemented"));
238 }
239
240 static CORE_ADDR
241 execute_stack_op (gdb_byte *exp, ULONGEST len,
242                   struct frame_info *next_frame, CORE_ADDR initial)
243 {
244   struct dwarf_expr_context *ctx;
245   CORE_ADDR result;
246
247   ctx = new_dwarf_expr_context ();
248   ctx->baton = next_frame;
249   ctx->read_reg = read_reg;
250   ctx->read_mem = read_mem;
251   ctx->get_frame_base = no_get_frame_base;
252   ctx->get_tls_address = no_get_tls_address;
253
254   dwarf_expr_push (ctx, initial);
255   dwarf_expr_eval (ctx, exp, len);
256   result = dwarf_expr_fetch (ctx, 0);
257
258   if (ctx->in_reg)
259     result = read_reg (next_frame, result);
260
261   free_dwarf_expr_context (ctx);
262
263   return result;
264 }
265 \f
266
267 static void
268 execute_cfa_program (gdb_byte *insn_ptr, gdb_byte *insn_end,
269                      struct frame_info *next_frame,
270                      struct dwarf2_frame_state *fs)
271 {
272   CORE_ADDR pc = frame_pc_unwind (next_frame);
273   int bytes_read;
274
275   while (insn_ptr < insn_end && fs->pc <= pc)
276     {
277       gdb_byte insn = *insn_ptr++;
278       ULONGEST utmp, reg;
279       LONGEST offset;
280
281       if ((insn & 0xc0) == DW_CFA_advance_loc)
282         fs->pc += (insn & 0x3f) * fs->code_align;
283       else if ((insn & 0xc0) == DW_CFA_offset)
284         {
285           reg = insn & 0x3f;
286           insn_ptr = read_uleb128 (insn_ptr, insn_end, &utmp);
287           offset = utmp * fs->data_align;
288           dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
289           fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_OFFSET;
290           fs->regs.reg[reg].loc.offset = offset;
291         }
292       else if ((insn & 0xc0) == DW_CFA_restore)
293         {
294           gdb_assert (fs->initial.reg);
295           reg = insn & 0x3f;
296           dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
297           if (reg < fs->initial.num_regs)
298             fs->regs.reg[reg] = fs->initial.reg[reg];
299           else 
300             fs->regs.reg[reg].how = DWARF2_FRAME_REG_UNSPECIFIED;
301
302           if (fs->regs.reg[reg].how == DWARF2_FRAME_REG_UNSPECIFIED)
303             complaint (&symfile_complaints, _("\
304 incomplete CFI data; DW_CFA_restore unspecified\n\
305 register %s (#%d) at 0x%s"),
306                        REGISTER_NAME(DWARF2_REG_TO_REGNUM(reg)),
307                        DWARF2_REG_TO_REGNUM(reg), paddr (fs->pc));
308         }
309       else
310         {
311           switch (insn)
312             {
313             case DW_CFA_set_loc:
314               fs->pc = dwarf2_read_address (insn_ptr, insn_end, &bytes_read);
315               insn_ptr += bytes_read;
316               break;
317
318             case DW_CFA_advance_loc1:
319               utmp = extract_unsigned_integer (insn_ptr, 1);
320               fs->pc += utmp * fs->code_align;
321               insn_ptr++;
322               break;
323             case DW_CFA_advance_loc2:
324               utmp = extract_unsigned_integer (insn_ptr, 2);
325               fs->pc += utmp * fs->code_align;
326               insn_ptr += 2;
327               break;
328             case DW_CFA_advance_loc4:
329               utmp = extract_unsigned_integer (insn_ptr, 4);
330               fs->pc += utmp * fs->code_align;
331               insn_ptr += 4;
332               break;
333
334             case DW_CFA_offset_extended:
335               insn_ptr = read_uleb128 (insn_ptr, insn_end, &reg);
336               insn_ptr = read_uleb128 (insn_ptr, insn_end, &utmp);
337               offset = utmp * fs->data_align;
338               dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
339               fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_OFFSET;
340               fs->regs.reg[reg].loc.offset = offset;
341               break;
342
343             case DW_CFA_restore_extended:
344               gdb_assert (fs->initial.reg);
345               insn_ptr = read_uleb128 (insn_ptr, insn_end, &reg);
346               dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
347               fs->regs.reg[reg] = fs->initial.reg[reg];
348               break;
349
350             case DW_CFA_undefined:
351               insn_ptr = read_uleb128 (insn_ptr, insn_end, &reg);
352               dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
353               fs->regs.reg[reg].how = DWARF2_FRAME_REG_UNDEFINED;
354               break;
355
356             case DW_CFA_same_value:
357               insn_ptr = read_uleb128 (insn_ptr, insn_end, &reg);
358               dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
359               fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAME_VALUE;
360               break;
361
362             case DW_CFA_register:
363               insn_ptr = read_uleb128 (insn_ptr, insn_end, &reg);
364               insn_ptr = read_uleb128 (insn_ptr, insn_end, &utmp);
365               dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
366               fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_REG;
367               fs->regs.reg[reg].loc.reg = utmp;
368               break;
369
370             case DW_CFA_remember_state:
371               {
372                 struct dwarf2_frame_state_reg_info *new_rs;
373
374                 new_rs = XMALLOC (struct dwarf2_frame_state_reg_info);
375                 *new_rs = fs->regs;
376                 fs->regs.reg = dwarf2_frame_state_copy_regs (&fs->regs);
377                 fs->regs.prev = new_rs;
378               }
379               break;
380
381             case DW_CFA_restore_state:
382               {
383                 struct dwarf2_frame_state_reg_info *old_rs = fs->regs.prev;
384
385                 if (old_rs == NULL)
386                   {
387                     complaint (&symfile_complaints, _("\
388 bad CFI data; mismatched DW_CFA_restore_state at 0x%s"), paddr (fs->pc));
389                   }
390                 else
391                   {
392                     xfree (fs->regs.reg);
393                     fs->regs = *old_rs;
394                     xfree (old_rs);
395                   }
396               }
397               break;
398
399             case DW_CFA_def_cfa:
400               insn_ptr = read_uleb128 (insn_ptr, insn_end, &fs->cfa_reg);
401               insn_ptr = read_uleb128 (insn_ptr, insn_end, &utmp);
402               fs->cfa_offset = utmp;
403               fs->cfa_how = CFA_REG_OFFSET;
404               break;
405
406             case DW_CFA_def_cfa_register:
407               insn_ptr = read_uleb128 (insn_ptr, insn_end, &fs->cfa_reg);
408               fs->cfa_how = CFA_REG_OFFSET;
409               break;
410
411             case DW_CFA_def_cfa_offset:
412               insn_ptr = read_uleb128 (insn_ptr, insn_end, &utmp);
413               fs->cfa_offset = utmp;
414               /* cfa_how deliberately not set.  */
415               break;
416
417             case DW_CFA_nop:
418               break;
419
420             case DW_CFA_def_cfa_expression:
421               insn_ptr = read_uleb128 (insn_ptr, insn_end, &fs->cfa_exp_len);
422               fs->cfa_exp = insn_ptr;
423               fs->cfa_how = CFA_EXP;
424               insn_ptr += fs->cfa_exp_len;
425               break;
426
427             case DW_CFA_expression:
428               insn_ptr = read_uleb128 (insn_ptr, insn_end, &reg);
429               dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
430               insn_ptr = read_uleb128 (insn_ptr, insn_end, &utmp);
431               fs->regs.reg[reg].loc.exp = insn_ptr;
432               fs->regs.reg[reg].exp_len = utmp;
433               fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_EXP;
434               insn_ptr += utmp;
435               break;
436
437             case DW_CFA_offset_extended_sf:
438               insn_ptr = read_uleb128 (insn_ptr, insn_end, &reg);
439               insn_ptr = read_sleb128 (insn_ptr, insn_end, &offset);
440               offset *= fs->data_align;
441               dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
442               fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_OFFSET;
443               fs->regs.reg[reg].loc.offset = offset;
444               break;
445
446             case DW_CFA_def_cfa_sf:
447               insn_ptr = read_uleb128 (insn_ptr, insn_end, &fs->cfa_reg);
448               insn_ptr = read_sleb128 (insn_ptr, insn_end, &offset);
449               fs->cfa_offset = offset * fs->data_align;
450               fs->cfa_how = CFA_REG_OFFSET;
451               break;
452
453             case DW_CFA_def_cfa_offset_sf:
454               insn_ptr = read_sleb128 (insn_ptr, insn_end, &offset);
455               fs->cfa_offset = offset * fs->data_align;
456               /* cfa_how deliberately not set.  */
457               break;
458
459             case DW_CFA_GNU_window_save:
460               /* This is SPARC-specific code, and contains hard-coded
461                  constants for the register numbering scheme used by
462                  GCC.  Rather than having a architecture-specific
463                  operation that's only ever used by a single
464                  architecture, we provide the implementation here.
465                  Incidentally that's what GCC does too in its
466                  unwinder.  */
467               {
468                 struct gdbarch *gdbarch = get_frame_arch (next_frame);
469                 int size = register_size(gdbarch, 0);
470                 dwarf2_frame_state_alloc_regs (&fs->regs, 32);
471                 for (reg = 8; reg < 16; reg++)
472                   {
473                     fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_REG;
474                     fs->regs.reg[reg].loc.reg = reg + 16;
475                   }
476                 for (reg = 16; reg < 32; reg++)
477                   {
478                     fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_OFFSET;
479                     fs->regs.reg[reg].loc.offset = (reg - 16) * size;
480                   }
481               }
482               break;
483
484             case DW_CFA_GNU_args_size:
485               /* Ignored.  */
486               insn_ptr = read_uleb128 (insn_ptr, insn_end, &utmp);
487               break;
488
489             default:
490               internal_error (__FILE__, __LINE__, _("Unknown CFI encountered."));
491             }
492         }
493     }
494
495   /* Don't allow remember/restore between CIE and FDE programs.  */
496   dwarf2_frame_state_free_regs (fs->regs.prev);
497   fs->regs.prev = NULL;
498 }
499 \f
500
501 /* Architecture-specific operations.  */
502
503 /* Per-architecture data key.  */
504 static struct gdbarch_data *dwarf2_frame_data;
505
506 struct dwarf2_frame_ops
507 {
508   /* Pre-initialize the register state REG for register REGNUM.  */
509   void (*init_reg) (struct gdbarch *, int, struct dwarf2_frame_state_reg *,
510                     struct frame_info *);
511
512   /* Check whether the frame preceding NEXT_FRAME will be a signal
513      trampoline.  */
514   int (*signal_frame_p) (struct gdbarch *, struct frame_info *);
515 };
516
517 /* Default architecture-specific register state initialization
518    function.  */
519
520 static void
521 dwarf2_frame_default_init_reg (struct gdbarch *gdbarch, int regnum,
522                                struct dwarf2_frame_state_reg *reg,
523                                struct frame_info *next_frame)
524 {
525   /* If we have a register that acts as a program counter, mark it as
526      a destination for the return address.  If we have a register that
527      serves as the stack pointer, arrange for it to be filled with the
528      call frame address (CFA).  The other registers are marked as
529      unspecified.
530
531      We copy the return address to the program counter, since many
532      parts in GDB assume that it is possible to get the return address
533      by unwinding the program counter register.  However, on ISA's
534      with a dedicated return address register, the CFI usually only
535      contains information to unwind that return address register.
536
537      The reason we're treating the stack pointer special here is
538      because in many cases GCC doesn't emit CFI for the stack pointer
539      and implicitly assumes that it is equal to the CFA.  This makes
540      some sense since the DWARF specification (version 3, draft 8,
541      p. 102) says that:
542
543      "Typically, the CFA is defined to be the value of the stack
544      pointer at the call site in the previous frame (which may be
545      different from its value on entry to the current frame)."
546
547      However, this isn't true for all platforms supported by GCC
548      (e.g. IBM S/390 and zSeries).  Those architectures should provide
549      their own architecture-specific initialization function.  */
550
551   if (regnum == PC_REGNUM)
552     reg->how = DWARF2_FRAME_REG_RA;
553   else if (regnum == SP_REGNUM)
554     reg->how = DWARF2_FRAME_REG_CFA;
555 }
556
557 /* Return a default for the architecture-specific operations.  */
558
559 static void *
560 dwarf2_frame_init (struct obstack *obstack)
561 {
562   struct dwarf2_frame_ops *ops;
563   
564   ops = OBSTACK_ZALLOC (obstack, struct dwarf2_frame_ops);
565   ops->init_reg = dwarf2_frame_default_init_reg;
566   return ops;
567 }
568
569 /* Set the architecture-specific register state initialization
570    function for GDBARCH to INIT_REG.  */
571
572 void
573 dwarf2_frame_set_init_reg (struct gdbarch *gdbarch,
574                            void (*init_reg) (struct gdbarch *, int,
575                                              struct dwarf2_frame_state_reg *,
576                                              struct frame_info *))
577 {
578   struct dwarf2_frame_ops *ops = gdbarch_data (gdbarch, dwarf2_frame_data);
579
580   ops->init_reg = init_reg;
581 }
582
583 /* Pre-initialize the register state REG for register REGNUM.  */
584
585 static void
586 dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
587                        struct dwarf2_frame_state_reg *reg,
588                        struct frame_info *next_frame)
589 {
590   struct dwarf2_frame_ops *ops = gdbarch_data (gdbarch, dwarf2_frame_data);
591
592   ops->init_reg (gdbarch, regnum, reg, next_frame);
593 }
594
595 /* Set the architecture-specific signal trampoline recognition
596    function for GDBARCH to SIGNAL_FRAME_P.  */
597
598 void
599 dwarf2_frame_set_signal_frame_p (struct gdbarch *gdbarch,
600                                  int (*signal_frame_p) (struct gdbarch *,
601                                                         struct frame_info *))
602 {
603   struct dwarf2_frame_ops *ops = gdbarch_data (gdbarch, dwarf2_frame_data);
604
605   ops->signal_frame_p = signal_frame_p;
606 }
607
608 /* Query the architecture-specific signal frame recognizer for
609    NEXT_FRAME.  */
610
611 static int
612 dwarf2_frame_signal_frame_p (struct gdbarch *gdbarch,
613                              struct frame_info *next_frame)
614 {
615   struct dwarf2_frame_ops *ops = gdbarch_data (gdbarch, dwarf2_frame_data);
616
617   if (ops->signal_frame_p == NULL)
618     return 0;
619   return ops->signal_frame_p (gdbarch, next_frame);
620 }
621 \f
622
623 struct dwarf2_frame_cache
624 {
625   /* DWARF Call Frame Address.  */
626   CORE_ADDR cfa;
627
628   /* Set if the return address column was marked as undefined.  */
629   int undefined_retaddr;
630
631   /* Saved registers, indexed by GDB register number, not by DWARF
632      register number.  */
633   struct dwarf2_frame_state_reg *reg;
634
635   /* Return address register.  */
636   struct dwarf2_frame_state_reg retaddr_reg;
637 };
638
639 static struct dwarf2_frame_cache *
640 dwarf2_frame_cache (struct frame_info *next_frame, void **this_cache)
641 {
642   struct cleanup *old_chain;
643   struct gdbarch *gdbarch = get_frame_arch (next_frame);
644   const int num_regs = NUM_REGS + NUM_PSEUDO_REGS;
645   struct dwarf2_frame_cache *cache;
646   struct dwarf2_frame_state *fs;
647   struct dwarf2_fde *fde;
648
649   if (*this_cache)
650     return *this_cache;
651
652   /* Allocate a new cache.  */
653   cache = FRAME_OBSTACK_ZALLOC (struct dwarf2_frame_cache);
654   cache->reg = FRAME_OBSTACK_CALLOC (num_regs, struct dwarf2_frame_state_reg);
655
656   /* Allocate and initialize the frame state.  */
657   fs = XMALLOC (struct dwarf2_frame_state);
658   memset (fs, 0, sizeof (struct dwarf2_frame_state));
659   old_chain = make_cleanup (dwarf2_frame_state_free, fs);
660
661   /* Unwind the PC.
662
663      Note that if NEXT_FRAME is never supposed to return (i.e. a call
664      to abort), the compiler might optimize away the instruction at
665      NEXT_FRAME's return address.  As a result the return address will
666      point at some random instruction, and the CFI for that
667      instruction is probably worthless to us.  GCC's unwinder solves
668      this problem by substracting 1 from the return address to get an
669      address in the middle of a presumed call instruction (or the
670      instruction in the associated delay slot).  This should only be
671      done for "normal" frames and not for resume-type frames (signal
672      handlers, sentinel frames, dummy frames).  The function
673      frame_unwind_address_in_block does just this.  It's not clear how
674      reliable the method is though; there is the potential for the
675      register state pre-call being different to that on return.  */
676   fs->pc = frame_unwind_address_in_block (next_frame);
677
678   /* Find the correct FDE.  */
679   fde = dwarf2_frame_find_fde (&fs->pc);
680   gdb_assert (fde != NULL);
681
682   /* Extract any interesting information from the CIE.  */
683   fs->data_align = fde->cie->data_alignment_factor;
684   fs->code_align = fde->cie->code_alignment_factor;
685   fs->retaddr_column = fde->cie->return_address_register;
686
687   /* First decode all the insns in the CIE.  */
688   execute_cfa_program (fde->cie->initial_instructions,
689                        fde->cie->end, next_frame, fs);
690
691   /* Save the initialized register set.  */
692   fs->initial = fs->regs;
693   fs->initial.reg = dwarf2_frame_state_copy_regs (&fs->regs);
694
695   /* Then decode the insns in the FDE up to our target PC.  */
696   execute_cfa_program (fde->instructions, fde->end, next_frame, fs);
697
698   /* Caclulate the CFA.  */
699   switch (fs->cfa_how)
700     {
701     case CFA_REG_OFFSET:
702       cache->cfa = read_reg (next_frame, fs->cfa_reg);
703       cache->cfa += fs->cfa_offset;
704       break;
705
706     case CFA_EXP:
707       cache->cfa =
708         execute_stack_op (fs->cfa_exp, fs->cfa_exp_len, next_frame, 0);
709       break;
710
711     default:
712       internal_error (__FILE__, __LINE__, _("Unknown CFA rule."));
713     }
714
715   /* Initialize the register state.  */
716   {
717     int regnum;
718
719     for (regnum = 0; regnum < num_regs; regnum++)
720       dwarf2_frame_init_reg (gdbarch, regnum, &cache->reg[regnum], next_frame);
721   }
722
723   /* Go through the DWARF2 CFI generated table and save its register
724      location information in the cache.  Note that we don't skip the
725      return address column; it's perfectly all right for it to
726      correspond to a real register.  If it doesn't correspond to a
727      real register, or if we shouldn't treat it as such,
728      DWARF2_REG_TO_REGNUM should be defined to return a number outside
729      the range [0, NUM_REGS).  */
730   {
731     int column;         /* CFI speak for "register number".  */
732
733     for (column = 0; column < fs->regs.num_regs; column++)
734       {
735         /* Use the GDB register number as the destination index.  */
736         int regnum = DWARF2_REG_TO_REGNUM (column);
737
738         /* If there's no corresponding GDB register, ignore it.  */
739         if (regnum < 0 || regnum >= num_regs)
740           continue;
741
742         /* NOTE: cagney/2003-09-05: CFI should specify the disposition
743            of all debug info registers.  If it doesn't, complain (but
744            not too loudly).  It turns out that GCC assumes that an
745            unspecified register implies "same value" when CFI (draft
746            7) specifies nothing at all.  Such a register could equally
747            be interpreted as "undefined".  Also note that this check
748            isn't sufficient; it only checks that all registers in the
749            range [0 .. max column] are specified, and won't detect
750            problems when a debug info register falls outside of the
751            table.  We need a way of iterating through all the valid
752            DWARF2 register numbers.  */
753         if (fs->regs.reg[column].how == DWARF2_FRAME_REG_UNSPECIFIED)
754           {
755             if (cache->reg[regnum].how == DWARF2_FRAME_REG_UNSPECIFIED)
756               complaint (&symfile_complaints, _("\
757 incomplete CFI data; unspecified registers (e.g., %s) at 0x%s"),
758                          gdbarch_register_name (gdbarch, regnum),
759                          paddr_nz (fs->pc));
760           }
761         else
762           cache->reg[regnum] = fs->regs.reg[column];
763       }
764   }
765
766   /* Eliminate any DWARF2_FRAME_REG_RA rules, and save the information
767      we need for evaluating DWARF2_FRAME_REG_RA_OFFSET rules.  */
768   {
769     int regnum;
770
771     for (regnum = 0; regnum < num_regs; regnum++)
772       {
773         if (cache->reg[regnum].how == DWARF2_FRAME_REG_RA
774             || cache->reg[regnum].how == DWARF2_FRAME_REG_RA_OFFSET)
775           {
776             struct dwarf2_frame_state_reg *retaddr_reg =
777               &fs->regs.reg[fs->retaddr_column];
778
779             /* It seems rather bizarre to specify an "empty" column as
780                the return adress column.  However, this is exactly
781                what GCC does on some targets.  It turns out that GCC
782                assumes that the return address can be found in the
783                register corresponding to the return address column.
784                Incidentally, that's how we should treat a return
785                address column specifying "same value" too.  */
786             if (fs->retaddr_column < fs->regs.num_regs
787                 && retaddr_reg->how != DWARF2_FRAME_REG_UNSPECIFIED
788                 && retaddr_reg->how != DWARF2_FRAME_REG_SAME_VALUE)
789               {
790                 if (cache->reg[regnum].how == DWARF2_FRAME_REG_RA)
791                   cache->reg[regnum] = *retaddr_reg;
792                 else
793                   cache->retaddr_reg = *retaddr_reg;
794               }
795             else
796               {
797                 if (cache->reg[regnum].how == DWARF2_FRAME_REG_RA)
798                   {
799                     cache->reg[regnum].loc.reg = fs->retaddr_column;
800                     cache->reg[regnum].how = DWARF2_FRAME_REG_SAVED_REG;
801                   }
802                 else
803                   {
804                     cache->retaddr_reg.loc.reg = fs->retaddr_column;
805                     cache->retaddr_reg.how = DWARF2_FRAME_REG_SAVED_REG;
806                   }
807               }
808           }
809       }
810   }
811
812   if (fs->retaddr_column < fs->regs.num_regs
813       && fs->regs.reg[fs->retaddr_column].how == DWARF2_FRAME_REG_UNDEFINED)
814     cache->undefined_retaddr = 1;
815
816   do_cleanups (old_chain);
817
818   *this_cache = cache;
819   return cache;
820 }
821
822 static void
823 dwarf2_frame_this_id (struct frame_info *next_frame, void **this_cache,
824                       struct frame_id *this_id)
825 {
826   struct dwarf2_frame_cache *cache =
827     dwarf2_frame_cache (next_frame, this_cache);
828
829   if (cache->undefined_retaddr)
830     return;
831
832   (*this_id) = frame_id_build (cache->cfa, frame_func_unwind (next_frame));
833 }
834
835 static void
836 dwarf2_frame_prev_register (struct frame_info *next_frame, void **this_cache,
837                             int regnum, int *optimizedp,
838                             enum lval_type *lvalp, CORE_ADDR *addrp,
839                             int *realnump, gdb_byte *valuep)
840 {
841   struct gdbarch *gdbarch = get_frame_arch (next_frame);
842   struct dwarf2_frame_cache *cache =
843     dwarf2_frame_cache (next_frame, this_cache);
844
845   switch (cache->reg[regnum].how)
846     {
847     case DWARF2_FRAME_REG_UNDEFINED:
848       /* If CFI explicitly specified that the value isn't defined,
849          mark it as optimized away; the value isn't available.  */
850       *optimizedp = 1;
851       *lvalp = not_lval;
852       *addrp = 0;
853       *realnump = -1;
854       if (valuep)
855         {
856           /* In some cases, for example %eflags on the i386, we have
857              to provide a sane value, even though this register wasn't
858              saved.  Assume we can get it from NEXT_FRAME.  */
859           frame_unwind_register (next_frame, regnum, valuep);
860         }
861       break;
862
863     case DWARF2_FRAME_REG_SAVED_OFFSET:
864       *optimizedp = 0;
865       *lvalp = lval_memory;
866       *addrp = cache->cfa + cache->reg[regnum].loc.offset;
867       *realnump = -1;
868       if (valuep)
869         {
870           /* Read the value in from memory.  */
871           read_memory (*addrp, valuep, register_size (gdbarch, regnum));
872         }
873       break;
874
875     case DWARF2_FRAME_REG_SAVED_REG:
876       *optimizedp = 0;
877       *lvalp = lval_register;
878       *addrp = 0;
879       *realnump = DWARF2_REG_TO_REGNUM (cache->reg[regnum].loc.reg);
880       if (valuep)
881         frame_unwind_register (next_frame, (*realnump), valuep);
882       break;
883
884     case DWARF2_FRAME_REG_SAVED_EXP:
885       *optimizedp = 0;
886       *lvalp = lval_memory;
887       *addrp = execute_stack_op (cache->reg[regnum].loc.exp,
888                                  cache->reg[regnum].exp_len,
889                                  next_frame, cache->cfa);
890       *realnump = -1;
891       if (valuep)
892         {
893           /* Read the value in from memory.  */
894           read_memory (*addrp, valuep, register_size (gdbarch, regnum));
895         }
896       break;
897
898     case DWARF2_FRAME_REG_UNSPECIFIED:
899       /* GCC, in its infinite wisdom decided to not provide unwind
900          information for registers that are "same value".  Since
901          DWARF2 (3 draft 7) doesn't define such behavior, said
902          registers are actually undefined (which is different to CFI
903          "undefined").  Code above issues a complaint about this.
904          Here just fudge the books, assume GCC, and that the value is
905          more inner on the stack.  */
906       *optimizedp = 0;
907       *lvalp = lval_register;
908       *addrp = 0;
909       *realnump = regnum;
910       if (valuep)
911         frame_unwind_register (next_frame, (*realnump), valuep);
912       break;
913
914     case DWARF2_FRAME_REG_SAME_VALUE:
915       *optimizedp = 0;
916       *lvalp = lval_register;
917       *addrp = 0;
918       *realnump = regnum;
919       if (valuep)
920         frame_unwind_register (next_frame, (*realnump), valuep);
921       break;
922
923     case DWARF2_FRAME_REG_CFA:
924       *optimizedp = 0;
925       *lvalp = not_lval;
926       *addrp = 0;
927       *realnump = -1;
928       if (valuep)
929         {
930           /* Store the value.  */
931           store_typed_address (valuep, builtin_type_void_data_ptr, cache->cfa);
932         }
933       break;
934
935     case DWARF2_FRAME_REG_CFA_OFFSET:
936       *optimizedp = 0;
937       *lvalp = not_lval;
938       *addrp = 0;
939       *realnump = -1;
940       if (valuep)
941         {
942           /* Store the value.  */
943           store_typed_address (valuep, builtin_type_void_data_ptr,
944                                cache->cfa + cache->reg[regnum].loc.offset);
945         }
946       break;
947
948     case DWARF2_FRAME_REG_RA_OFFSET:
949       *optimizedp = 0;
950       *lvalp = not_lval;
951       *addrp = 0;
952       *realnump = -1;
953       if (valuep)
954         {
955           CORE_ADDR pc = cache->reg[regnum].loc.offset;
956
957           regnum = DWARF2_REG_TO_REGNUM (cache->retaddr_reg.loc.reg);
958           pc += frame_unwind_register_unsigned (next_frame, regnum);
959           store_typed_address (valuep, builtin_type_void_func_ptr, pc);
960         }
961       break;
962
963     default:
964       internal_error (__FILE__, __LINE__, _("Unknown register rule."));
965     }
966 }
967
968 static const struct frame_unwind dwarf2_frame_unwind =
969 {
970   NORMAL_FRAME,
971   dwarf2_frame_this_id,
972   dwarf2_frame_prev_register
973 };
974
975 static const struct frame_unwind dwarf2_signal_frame_unwind =
976 {
977   SIGTRAMP_FRAME,
978   dwarf2_frame_this_id,
979   dwarf2_frame_prev_register
980 };
981
982 const struct frame_unwind *
983 dwarf2_frame_sniffer (struct frame_info *next_frame)
984 {
985   /* Grab an address that is guarenteed to reside somewhere within the
986      function.  frame_pc_unwind(), for a no-return next function, can
987      end up returning something past the end of this function's body.  */
988   CORE_ADDR block_addr = frame_unwind_address_in_block (next_frame);
989   if (!dwarf2_frame_find_fde (&block_addr))
990     return NULL;
991
992   /* On some targets, signal trampolines may have unwind information.
993      We need to recognize them so that we set the frame type
994      correctly.  */
995
996   if (dwarf2_frame_signal_frame_p (get_frame_arch (next_frame),
997                                    next_frame))
998     return &dwarf2_signal_frame_unwind;
999
1000   return &dwarf2_frame_unwind;
1001 }
1002 \f
1003
1004 /* There is no explicitly defined relationship between the CFA and the
1005    location of frame's local variables and arguments/parameters.
1006    Therefore, frame base methods on this page should probably only be
1007    used as a last resort, just to avoid printing total garbage as a
1008    response to the "info frame" command.  */
1009
1010 static CORE_ADDR
1011 dwarf2_frame_base_address (struct frame_info *next_frame, void **this_cache)
1012 {
1013   struct dwarf2_frame_cache *cache =
1014     dwarf2_frame_cache (next_frame, this_cache);
1015
1016   return cache->cfa;
1017 }
1018
1019 static const struct frame_base dwarf2_frame_base =
1020 {
1021   &dwarf2_frame_unwind,
1022   dwarf2_frame_base_address,
1023   dwarf2_frame_base_address,
1024   dwarf2_frame_base_address
1025 };
1026
1027 const struct frame_base *
1028 dwarf2_frame_base_sniffer (struct frame_info *next_frame)
1029 {
1030   CORE_ADDR pc = frame_pc_unwind (next_frame);
1031   if (dwarf2_frame_find_fde (&pc))
1032     return &dwarf2_frame_base;
1033
1034   return NULL;
1035 }
1036 \f
1037 /* A minimal decoding of DWARF2 compilation units.  We only decode
1038    what's needed to get to the call frame information.  */
1039
1040 struct comp_unit
1041 {
1042   /* Keep the bfd convenient.  */
1043   bfd *abfd;
1044
1045   struct objfile *objfile;
1046
1047   /* Linked list of CIEs for this object.  */
1048   struct dwarf2_cie *cie;
1049
1050   /* Pointer to the .debug_frame section loaded into memory.  */
1051   gdb_byte *dwarf_frame_buffer;
1052
1053   /* Length of the loaded .debug_frame section.  */
1054   unsigned long dwarf_frame_size;
1055
1056   /* Pointer to the .debug_frame section.  */
1057   asection *dwarf_frame_section;
1058
1059   /* Base for DW_EH_PE_datarel encodings.  */
1060   bfd_vma dbase;
1061
1062   /* Base for DW_EH_PE_textrel encodings.  */
1063   bfd_vma tbase;
1064 };
1065
1066 const struct objfile_data *dwarf2_frame_objfile_data;
1067
1068 static unsigned int
1069 read_1_byte (bfd *abfd, gdb_byte *buf)
1070 {
1071   return bfd_get_8 (abfd, buf);
1072 }
1073
1074 static unsigned int
1075 read_4_bytes (bfd *abfd, gdb_byte *buf)
1076 {
1077   return bfd_get_32 (abfd, buf);
1078 }
1079
1080 static ULONGEST
1081 read_8_bytes (bfd *abfd, gdb_byte *buf)
1082 {
1083   return bfd_get_64 (abfd, buf);
1084 }
1085
1086 static ULONGEST
1087 read_unsigned_leb128 (bfd *abfd, gdb_byte *buf, unsigned int *bytes_read_ptr)
1088 {
1089   ULONGEST result;
1090   unsigned int num_read;
1091   int shift;
1092   gdb_byte byte;
1093
1094   result = 0;
1095   shift = 0;
1096   num_read = 0;
1097
1098   do
1099     {
1100       byte = bfd_get_8 (abfd, (bfd_byte *) buf);
1101       buf++;
1102       num_read++;
1103       result |= ((byte & 0x7f) << shift);
1104       shift += 7;
1105     }
1106   while (byte & 0x80);
1107
1108   *bytes_read_ptr = num_read;
1109
1110   return result;
1111 }
1112
1113 static LONGEST
1114 read_signed_leb128 (bfd *abfd, gdb_byte *buf, unsigned int *bytes_read_ptr)
1115 {
1116   LONGEST result;
1117   int shift;
1118   unsigned int num_read;
1119   gdb_byte byte;
1120
1121   result = 0;
1122   shift = 0;
1123   num_read = 0;
1124
1125   do
1126     {
1127       byte = bfd_get_8 (abfd, (bfd_byte *) buf);
1128       buf++;
1129       num_read++;
1130       result |= ((byte & 0x7f) << shift);
1131       shift += 7;
1132     }
1133   while (byte & 0x80);
1134
1135   if (shift < 8 * sizeof (result) && (byte & 0x40))
1136     result |= -(((LONGEST)1) << shift);
1137
1138   *bytes_read_ptr = num_read;
1139
1140   return result;
1141 }
1142
1143 static ULONGEST
1144 read_initial_length (bfd *abfd, gdb_byte *buf, unsigned int *bytes_read_ptr)
1145 {
1146   LONGEST result;
1147
1148   result = bfd_get_32 (abfd, buf);
1149   if (result == 0xffffffff)
1150     {
1151       result = bfd_get_64 (abfd, buf + 4);
1152       *bytes_read_ptr = 12;
1153     }
1154   else
1155     *bytes_read_ptr = 4;
1156
1157   return result;
1158 }
1159 \f
1160
1161 /* Pointer encoding helper functions.  */
1162
1163 /* GCC supports exception handling based on DWARF2 CFI.  However, for
1164    technical reasons, it encodes addresses in its FDE's in a different
1165    way.  Several "pointer encodings" are supported.  The encoding
1166    that's used for a particular FDE is determined by the 'R'
1167    augmentation in the associated CIE.  The argument of this
1168    augmentation is a single byte.  
1169
1170    The address can be encoded as 2 bytes, 4 bytes, 8 bytes, or as a
1171    LEB128.  This is encoded in bits 0, 1 and 2.  Bit 3 encodes whether
1172    the address is signed or unsigned.  Bits 4, 5 and 6 encode how the
1173    address should be interpreted (absolute, relative to the current
1174    position in the FDE, ...).  Bit 7, indicates that the address
1175    should be dereferenced.  */
1176
1177 static gdb_byte
1178 encoding_for_size (unsigned int size)
1179 {
1180   switch (size)
1181     {
1182     case 2:
1183       return DW_EH_PE_udata2;
1184     case 4:
1185       return DW_EH_PE_udata4;
1186     case 8:
1187       return DW_EH_PE_udata8;
1188     default:
1189       internal_error (__FILE__, __LINE__, _("Unsupported address size"));
1190     }
1191 }
1192
1193 static unsigned int
1194 size_of_encoded_value (gdb_byte encoding)
1195 {
1196   if (encoding == DW_EH_PE_omit)
1197     return 0;
1198
1199   switch (encoding & 0x07)
1200     {
1201     case DW_EH_PE_absptr:
1202       return TYPE_LENGTH (builtin_type_void_data_ptr);
1203     case DW_EH_PE_udata2:
1204       return 2;
1205     case DW_EH_PE_udata4:
1206       return 4;
1207     case DW_EH_PE_udata8:
1208       return 8;
1209     default:
1210       internal_error (__FILE__, __LINE__, _("Invalid or unsupported encoding"));
1211     }
1212 }
1213
1214 static CORE_ADDR
1215 read_encoded_value (struct comp_unit *unit, gdb_byte encoding,
1216                     gdb_byte *buf, unsigned int *bytes_read_ptr)
1217 {
1218   int ptr_len = size_of_encoded_value (DW_EH_PE_absptr);
1219   ptrdiff_t offset;
1220   CORE_ADDR base;
1221
1222   /* GCC currently doesn't generate DW_EH_PE_indirect encodings for
1223      FDE's.  */
1224   if (encoding & DW_EH_PE_indirect)
1225     internal_error (__FILE__, __LINE__, 
1226                     _("Unsupported encoding: DW_EH_PE_indirect"));
1227
1228   *bytes_read_ptr = 0;
1229
1230   switch (encoding & 0x70)
1231     {
1232     case DW_EH_PE_absptr:
1233       base = 0;
1234       break;
1235     case DW_EH_PE_pcrel:
1236       base = bfd_get_section_vma (unit->bfd, unit->dwarf_frame_section);
1237       base += (buf - unit->dwarf_frame_buffer);
1238       break;
1239     case DW_EH_PE_datarel:
1240       base = unit->dbase;
1241       break;
1242     case DW_EH_PE_textrel:
1243       base = unit->tbase;
1244       break;
1245     case DW_EH_PE_funcrel:
1246       /* FIXME: kettenis/20040501: For now just pretend
1247          DW_EH_PE_funcrel is equivalent to DW_EH_PE_absptr.  For
1248          reading the initial location of an FDE it should be treated
1249          as such, and currently that's the only place where this code
1250          is used.  */
1251       base = 0;
1252       break;
1253     case DW_EH_PE_aligned:
1254       base = 0;
1255       offset = buf - unit->dwarf_frame_buffer;
1256       if ((offset % ptr_len) != 0)
1257         {
1258           *bytes_read_ptr = ptr_len - (offset % ptr_len);
1259           buf += *bytes_read_ptr;
1260         }
1261       break;
1262     default:
1263       internal_error (__FILE__, __LINE__, _("Invalid or unsupported encoding"));
1264     }
1265
1266   if ((encoding & 0x07) == 0x00)
1267     encoding |= encoding_for_size (ptr_len);
1268
1269   switch (encoding & 0x0f)
1270     {
1271     case DW_EH_PE_uleb128:
1272       {
1273         ULONGEST value;
1274         gdb_byte *end_buf = buf + (sizeof (value) + 1) * 8 / 7;
1275         *bytes_read_ptr += read_uleb128 (buf, end_buf, &value) - buf;
1276         return base + value;
1277       }
1278     case DW_EH_PE_udata2:
1279       *bytes_read_ptr += 2;
1280       return (base + bfd_get_16 (unit->abfd, (bfd_byte *) buf));
1281     case DW_EH_PE_udata4:
1282       *bytes_read_ptr += 4;
1283       return (base + bfd_get_32 (unit->abfd, (bfd_byte *) buf));
1284     case DW_EH_PE_udata8:
1285       *bytes_read_ptr += 8;
1286       return (base + bfd_get_64 (unit->abfd, (bfd_byte *) buf));
1287     case DW_EH_PE_sleb128:
1288       {
1289         LONGEST value;
1290         gdb_byte *end_buf = buf + (sizeof (value) + 1) * 8 / 7;
1291         *bytes_read_ptr += read_sleb128 (buf, end_buf, &value) - buf;
1292         return base + value;
1293       }
1294     case DW_EH_PE_sdata2:
1295       *bytes_read_ptr += 2;
1296       return (base + bfd_get_signed_16 (unit->abfd, (bfd_byte *) buf));
1297     case DW_EH_PE_sdata4:
1298       *bytes_read_ptr += 4;
1299       return (base + bfd_get_signed_32 (unit->abfd, (bfd_byte *) buf));
1300     case DW_EH_PE_sdata8:
1301       *bytes_read_ptr += 8;
1302       return (base + bfd_get_signed_64 (unit->abfd, (bfd_byte *) buf));
1303     default:
1304       internal_error (__FILE__, __LINE__, _("Invalid or unsupported encoding"));
1305     }
1306 }
1307 \f
1308
1309 /* GCC uses a single CIE for all FDEs in a .debug_frame section.
1310    That's why we use a simple linked list here.  */
1311
1312 static struct dwarf2_cie *
1313 find_cie (struct comp_unit *unit, ULONGEST cie_pointer)
1314 {
1315   struct dwarf2_cie *cie = unit->cie;
1316
1317   while (cie)
1318     {
1319       if (cie->cie_pointer == cie_pointer)
1320         return cie;
1321
1322       cie = cie->next;
1323     }
1324
1325   return NULL;
1326 }
1327
1328 static void
1329 add_cie (struct comp_unit *unit, struct dwarf2_cie *cie)
1330 {
1331   cie->next = unit->cie;
1332   unit->cie = cie;
1333 }
1334
1335 /* Find the FDE for *PC.  Return a pointer to the FDE, and store the
1336    inital location associated with it into *PC.  */
1337
1338 static struct dwarf2_fde *
1339 dwarf2_frame_find_fde (CORE_ADDR *pc)
1340 {
1341   struct objfile *objfile;
1342
1343   ALL_OBJFILES (objfile)
1344     {
1345       struct dwarf2_fde *fde;
1346       CORE_ADDR offset;
1347
1348       fde = objfile_data (objfile, dwarf2_frame_objfile_data);
1349       if (fde == NULL)
1350         continue;
1351
1352       gdb_assert (objfile->section_offsets);
1353       offset = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
1354
1355       while (fde)
1356         {
1357           if (*pc >= fde->initial_location + offset
1358               && *pc < fde->initial_location + offset + fde->address_range)
1359             {
1360               *pc = fde->initial_location + offset;
1361               return fde;
1362             }
1363
1364           fde = fde->next;
1365         }
1366     }
1367
1368   return NULL;
1369 }
1370
1371 static void
1372 add_fde (struct comp_unit *unit, struct dwarf2_fde *fde)
1373 {
1374   fde->next = objfile_data (unit->objfile, dwarf2_frame_objfile_data);
1375   set_objfile_data (unit->objfile, dwarf2_frame_objfile_data, fde);
1376 }
1377
1378 #ifdef CC_HAS_LONG_LONG
1379 #define DW64_CIE_ID 0xffffffffffffffffULL
1380 #else
1381 #define DW64_CIE_ID ~0
1382 #endif
1383
1384 static gdb_byte *decode_frame_entry (struct comp_unit *unit, gdb_byte *start,
1385                                      int eh_frame_p);
1386
1387 /* Decode the next CIE or FDE.  Return NULL if invalid input, otherwise
1388    the next byte to be processed.  */
1389 static gdb_byte *
1390 decode_frame_entry_1 (struct comp_unit *unit, gdb_byte *start, int eh_frame_p)
1391 {
1392   gdb_byte *buf, *end;
1393   LONGEST length;
1394   unsigned int bytes_read;
1395   int dwarf64_p;
1396   ULONGEST cie_id;
1397   ULONGEST cie_pointer;
1398
1399   buf = start;
1400   length = read_initial_length (unit->abfd, buf, &bytes_read);
1401   buf += bytes_read;
1402   end = buf + length;
1403
1404   /* Are we still within the section? */
1405   if (end > unit->dwarf_frame_buffer + unit->dwarf_frame_size)
1406     return NULL;
1407
1408   if (length == 0)
1409     return end;
1410
1411   /* Distinguish between 32 and 64-bit encoded frame info.  */
1412   dwarf64_p = (bytes_read == 12);
1413
1414   /* In a .eh_frame section, zero is used to distinguish CIEs from FDEs.  */
1415   if (eh_frame_p)
1416     cie_id = 0;
1417   else if (dwarf64_p)
1418     cie_id = DW64_CIE_ID;
1419   else
1420     cie_id = DW_CIE_ID;
1421
1422   if (dwarf64_p)
1423     {
1424       cie_pointer = read_8_bytes (unit->abfd, buf);
1425       buf += 8;
1426     }
1427   else
1428     {
1429       cie_pointer = read_4_bytes (unit->abfd, buf);
1430       buf += 4;
1431     }
1432
1433   if (cie_pointer == cie_id)
1434     {
1435       /* This is a CIE.  */
1436       struct dwarf2_cie *cie;
1437       char *augmentation;
1438       unsigned int cie_version;
1439
1440       /* Record the offset into the .debug_frame section of this CIE.  */
1441       cie_pointer = start - unit->dwarf_frame_buffer;
1442
1443       /* Check whether we've already read it.  */
1444       if (find_cie (unit, cie_pointer))
1445         return end;
1446
1447       cie = (struct dwarf2_cie *)
1448         obstack_alloc (&unit->objfile->objfile_obstack,
1449                        sizeof (struct dwarf2_cie));
1450       cie->initial_instructions = NULL;
1451       cie->cie_pointer = cie_pointer;
1452
1453       /* The encoding for FDE's in a normal .debug_frame section
1454          depends on the target address size.  */
1455       cie->encoding = DW_EH_PE_absptr;
1456
1457       /* Check version number.  */
1458       cie_version = read_1_byte (unit->abfd, buf);
1459       if (cie_version != 1 && cie_version != 3)
1460         return NULL;
1461       buf += 1;
1462
1463       /* Interpret the interesting bits of the augmentation.  */
1464       augmentation = (char *) buf;
1465       buf += (strlen (augmentation) + 1);
1466
1467       /* The GCC 2.x "eh" augmentation has a pointer immediately
1468          following the augmentation string, so it must be handled
1469          first.  */
1470       if (augmentation[0] == 'e' && augmentation[1] == 'h')
1471         {
1472           /* Skip.  */
1473           buf += TYPE_LENGTH (builtin_type_void_data_ptr);
1474           augmentation += 2;
1475         }
1476
1477       cie->code_alignment_factor =
1478         read_unsigned_leb128 (unit->abfd, buf, &bytes_read);
1479       buf += bytes_read;
1480
1481       cie->data_alignment_factor =
1482         read_signed_leb128 (unit->abfd, buf, &bytes_read);
1483       buf += bytes_read;
1484
1485       if (cie_version == 1)
1486         {
1487           cie->return_address_register = read_1_byte (unit->abfd, buf);
1488           bytes_read = 1;
1489         }
1490       else
1491         cie->return_address_register = read_unsigned_leb128 (unit->abfd, buf,
1492                                                              &bytes_read);
1493       buf += bytes_read;
1494
1495       cie->saw_z_augmentation = (*augmentation == 'z');
1496       if (cie->saw_z_augmentation)
1497         {
1498           ULONGEST length;
1499
1500           length = read_unsigned_leb128 (unit->abfd, buf, &bytes_read);
1501           buf += bytes_read;
1502           if (buf > end)
1503             return NULL;
1504           cie->initial_instructions = buf + length;
1505           augmentation++;
1506         }
1507
1508       while (*augmentation)
1509         {
1510           /* "L" indicates a byte showing how the LSDA pointer is encoded.  */
1511           if (*augmentation == 'L')
1512             {
1513               /* Skip.  */
1514               buf++;
1515               augmentation++;
1516             }
1517
1518           /* "R" indicates a byte indicating how FDE addresses are encoded.  */
1519           else if (*augmentation == 'R')
1520             {
1521               cie->encoding = *buf++;
1522               augmentation++;
1523             }
1524
1525           /* "P" indicates a personality routine in the CIE augmentation.  */
1526           else if (*augmentation == 'P')
1527             {
1528               /* Skip.  Avoid indirection since we throw away the result.  */
1529               gdb_byte encoding = (*buf++) & ~DW_EH_PE_indirect;
1530               read_encoded_value (unit, encoding, buf, &bytes_read);
1531               buf += bytes_read;
1532               augmentation++;
1533             }
1534
1535           /* Otherwise we have an unknown augmentation.
1536              Bail out unless we saw a 'z' prefix.  */
1537           else
1538             {
1539               if (cie->initial_instructions == NULL)
1540                 return end;
1541
1542               /* Skip unknown augmentations.  */
1543               buf = cie->initial_instructions;
1544               break;
1545             }
1546         }
1547
1548       cie->initial_instructions = buf;
1549       cie->end = end;
1550
1551       add_cie (unit, cie);
1552     }
1553   else
1554     {
1555       /* This is a FDE.  */
1556       struct dwarf2_fde *fde;
1557
1558       /* In an .eh_frame section, the CIE pointer is the delta between the
1559          address within the FDE where the CIE pointer is stored and the
1560          address of the CIE.  Convert it to an offset into the .eh_frame
1561          section.  */
1562       if (eh_frame_p)
1563         {
1564           cie_pointer = buf - unit->dwarf_frame_buffer - cie_pointer;
1565           cie_pointer -= (dwarf64_p ? 8 : 4);
1566         }
1567
1568       /* In either case, validate the result is still within the section.  */
1569       if (cie_pointer >= unit->dwarf_frame_size)
1570         return NULL;
1571
1572       fde = (struct dwarf2_fde *)
1573         obstack_alloc (&unit->objfile->objfile_obstack,
1574                        sizeof (struct dwarf2_fde));
1575       fde->cie = find_cie (unit, cie_pointer);
1576       if (fde->cie == NULL)
1577         {
1578           decode_frame_entry (unit, unit->dwarf_frame_buffer + cie_pointer,
1579                               eh_frame_p);
1580           fde->cie = find_cie (unit, cie_pointer);
1581         }
1582
1583       gdb_assert (fde->cie != NULL);
1584
1585       fde->initial_location =
1586         read_encoded_value (unit, fde->cie->encoding, buf, &bytes_read);
1587       buf += bytes_read;
1588
1589       fde->address_range =
1590         read_encoded_value (unit, fde->cie->encoding & 0x0f, buf, &bytes_read);
1591       buf += bytes_read;
1592
1593       /* A 'z' augmentation in the CIE implies the presence of an
1594          augmentation field in the FDE as well.  The only thing known
1595          to be in here at present is the LSDA entry for EH.  So we
1596          can skip the whole thing.  */
1597       if (fde->cie->saw_z_augmentation)
1598         {
1599           ULONGEST length;
1600
1601           length = read_unsigned_leb128 (unit->abfd, buf, &bytes_read);
1602           buf += bytes_read + length;
1603           if (buf > end)
1604             return NULL;
1605         }
1606
1607       fde->instructions = buf;
1608       fde->end = end;
1609
1610       add_fde (unit, fde);
1611     }
1612
1613   return end;
1614 }
1615
1616 /* Read a CIE or FDE in BUF and decode it.  */
1617 static gdb_byte *
1618 decode_frame_entry (struct comp_unit *unit, gdb_byte *start, int eh_frame_p)
1619 {
1620   enum { NONE, ALIGN4, ALIGN8, FAIL } workaround = NONE;
1621   gdb_byte *ret;
1622   const char *msg;
1623   ptrdiff_t start_offset;
1624
1625   while (1)
1626     {
1627       ret = decode_frame_entry_1 (unit, start, eh_frame_p);
1628       if (ret != NULL)
1629         break;
1630
1631       /* We have corrupt input data of some form.  */
1632
1633       /* ??? Try, weakly, to work around compiler/assembler/linker bugs
1634          and mismatches wrt padding and alignment of debug sections.  */
1635       /* Note that there is no requirement in the standard for any
1636          alignment at all in the frame unwind sections.  Testing for
1637          alignment before trying to interpret data would be incorrect.
1638
1639          However, GCC traditionally arranged for frame sections to be
1640          sized such that the FDE length and CIE fields happen to be
1641          aligned (in theory, for performance).  This, unfortunately,
1642          was done with .align directives, which had the side effect of
1643          forcing the section to be aligned by the linker.
1644
1645          This becomes a problem when you have some other producer that
1646          creates frame sections that are not as strictly aligned.  That
1647          produces a hole in the frame info that gets filled by the 
1648          linker with zeros.
1649
1650          The GCC behaviour is arguably a bug, but it's effectively now
1651          part of the ABI, so we're now stuck with it, at least at the
1652          object file level.  A smart linker may decide, in the process
1653          of compressing duplicate CIE information, that it can rewrite
1654          the entire output section without this extra padding.  */
1655
1656       start_offset = start - unit->dwarf_frame_buffer;
1657       if (workaround < ALIGN4 && (start_offset & 3) != 0)
1658         {
1659           start += 4 - (start_offset & 3);
1660           workaround = ALIGN4;
1661           continue;
1662         }
1663       if (workaround < ALIGN8 && (start_offset & 7) != 0)
1664         {
1665           start += 8 - (start_offset & 7);
1666           workaround = ALIGN8;
1667           continue;
1668         }
1669
1670       /* Nothing left to try.  Arrange to return as if we've consumed
1671          the entire input section.  Hopefully we'll get valid info from
1672          the other of .debug_frame/.eh_frame.  */
1673       workaround = FAIL;
1674       ret = unit->dwarf_frame_buffer + unit->dwarf_frame_size;
1675       break;
1676     }
1677
1678   switch (workaround)
1679     {
1680     case NONE:
1681       break;
1682
1683     case ALIGN4:
1684       complaint (&symfile_complaints,
1685                  _("Corrupt data in %s:%s; align 4 workaround apparently succeeded"),
1686                  unit->dwarf_frame_section->owner->filename,
1687                  unit->dwarf_frame_section->name);
1688       break;
1689
1690     case ALIGN8:
1691       complaint (&symfile_complaints,
1692                  _("Corrupt data in %s:%s; align 8 workaround apparently succeeded"),
1693                  unit->dwarf_frame_section->owner->filename,
1694                  unit->dwarf_frame_section->name);
1695       break;
1696
1697     default:
1698       complaint (&symfile_complaints,
1699                  _("Corrupt data in %s:%s"),
1700                  unit->dwarf_frame_section->owner->filename,
1701                  unit->dwarf_frame_section->name);
1702       break;
1703     }
1704
1705   return ret;
1706 }
1707 \f
1708
1709 /* FIXME: kettenis/20030504: This still needs to be integrated with
1710    dwarf2read.c in a better way.  */
1711
1712 /* Imported from dwarf2read.c.  */
1713 extern asection *dwarf_frame_section;
1714 extern asection *dwarf_eh_frame_section;
1715
1716 /* Imported from dwarf2read.c.  */
1717 extern gdb_byte *dwarf2_read_section (struct objfile *objfile, asection *sectp);
1718
1719 void
1720 dwarf2_build_frame_info (struct objfile *objfile)
1721 {
1722   struct comp_unit unit;
1723   gdb_byte *frame_ptr;
1724
1725   /* Build a minimal decoding of the DWARF2 compilation unit.  */
1726   unit.abfd = objfile->obfd;
1727   unit.objfile = objfile;
1728   unit.dbase = 0;
1729   unit.tbase = 0;
1730
1731   /* First add the information from the .eh_frame section.  That way,
1732      the FDEs from that section are searched last.  */
1733   if (dwarf_eh_frame_section)
1734     {
1735       asection *got, *txt;
1736
1737       unit.cie = NULL;
1738       unit.dwarf_frame_buffer = dwarf2_read_section (objfile,
1739                                                      dwarf_eh_frame_section);
1740
1741       unit.dwarf_frame_size = bfd_get_section_size (dwarf_eh_frame_section);
1742       unit.dwarf_frame_section = dwarf_eh_frame_section;
1743
1744       /* FIXME: kettenis/20030602: This is the DW_EH_PE_datarel base
1745          that is used for the i386/amd64 target, which currently is
1746          the only target in GCC that supports/uses the
1747          DW_EH_PE_datarel encoding.  */
1748       got = bfd_get_section_by_name (unit.abfd, ".got");
1749       if (got)
1750         unit.dbase = got->vma;
1751
1752       /* GCC emits the DW_EH_PE_textrel encoding type on sh and ia64
1753          so far.  */
1754       txt = bfd_get_section_by_name (unit.abfd, ".text");
1755       if (txt)
1756         unit.tbase = txt->vma;
1757
1758       frame_ptr = unit.dwarf_frame_buffer;
1759       while (frame_ptr < unit.dwarf_frame_buffer + unit.dwarf_frame_size)
1760         frame_ptr = decode_frame_entry (&unit, frame_ptr, 1);
1761     }
1762
1763   if (dwarf_frame_section)
1764     {
1765       unit.cie = NULL;
1766       unit.dwarf_frame_buffer = dwarf2_read_section (objfile,
1767                                                      dwarf_frame_section);
1768       unit.dwarf_frame_size = bfd_get_section_size (dwarf_frame_section);
1769       unit.dwarf_frame_section = dwarf_frame_section;
1770
1771       frame_ptr = unit.dwarf_frame_buffer;
1772       while (frame_ptr < unit.dwarf_frame_buffer + unit.dwarf_frame_size)
1773         frame_ptr = decode_frame_entry (&unit, frame_ptr, 0);
1774     }
1775 }
1776
1777 /* Provide a prototype to silence -Wmissing-prototypes.  */
1778 void _initialize_dwarf2_frame (void);
1779
1780 void
1781 _initialize_dwarf2_frame (void)
1782 {
1783   dwarf2_frame_data = gdbarch_data_register_pre_init (dwarf2_frame_init);
1784   dwarf2_frame_objfile_data = register_objfile_data ();
1785 }