* dwarf2-frame.c: (execute_cfa_program): Don't access past the
[platform/upstream/binutils.git] / gdb / dwarf2-frame.c
1 /* Frame unwinder for frames with DWARF Call Frame Information.
2
3    Copyright 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., 59 Temple Place - Suite 330,
22    Boston, MA 02111-1307, 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
511   /* Check whether the frame preceding NEXT_FRAME will be a signal
512      trampoline.  */
513   int (*signal_frame_p) (struct gdbarch *, struct frame_info *);
514 };
515
516 /* Default architecture-specific register state initialization
517    function.  */
518
519 static void
520 dwarf2_frame_default_init_reg (struct gdbarch *gdbarch, int regnum,
521                                struct dwarf2_frame_state_reg *reg)
522 {
523   /* If we have a register that acts as a program counter, mark it as
524      a destination for the return address.  If we have a register that
525      serves as the stack pointer, arrange for it to be filled with the
526      call frame address (CFA).  The other registers are marked as
527      unspecified.
528
529      We copy the return address to the program counter, since many
530      parts in GDB assume that it is possible to get the return address
531      by unwinding the program counter register.  However, on ISA's
532      with a dedicated return address register, the CFI usually only
533      contains information to unwind that return address register.
534
535      The reason we're treating the stack pointer special here is
536      because in many cases GCC doesn't emit CFI for the stack pointer
537      and implicitly assumes that it is equal to the CFA.  This makes
538      some sense since the DWARF specification (version 3, draft 8,
539      p. 102) says that:
540
541      "Typically, the CFA is defined to be the value of the stack
542      pointer at the call site in the previous frame (which may be
543      different from its value on entry to the current frame)."
544
545      However, this isn't true for all platforms supported by GCC
546      (e.g. IBM S/390 and zSeries).  Those architectures should provide
547      their own architecture-specific initialization function.  */
548
549   if (regnum == PC_REGNUM)
550     reg->how = DWARF2_FRAME_REG_RA;
551   else if (regnum == SP_REGNUM)
552     reg->how = DWARF2_FRAME_REG_CFA;
553 }
554
555 /* Return a default for the architecture-specific operations.  */
556
557 static void *
558 dwarf2_frame_init (struct obstack *obstack)
559 {
560   struct dwarf2_frame_ops *ops;
561   
562   ops = OBSTACK_ZALLOC (obstack, struct dwarf2_frame_ops);
563   ops->init_reg = dwarf2_frame_default_init_reg;
564   return ops;
565 }
566
567 /* Set the architecture-specific register state initialization
568    function for GDBARCH to INIT_REG.  */
569
570 void
571 dwarf2_frame_set_init_reg (struct gdbarch *gdbarch,
572                            void (*init_reg) (struct gdbarch *, int,
573                                              struct dwarf2_frame_state_reg *))
574 {
575   struct dwarf2_frame_ops *ops = gdbarch_data (gdbarch, dwarf2_frame_data);
576
577   ops->init_reg = init_reg;
578 }
579
580 /* Pre-initialize the register state REG for register REGNUM.  */
581
582 static void
583 dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
584                        struct dwarf2_frame_state_reg *reg)
585 {
586   struct dwarf2_frame_ops *ops = gdbarch_data (gdbarch, dwarf2_frame_data);
587
588   ops->init_reg (gdbarch, regnum, reg);
589 }
590
591 /* Set the architecture-specific signal trampoline recognition
592    function for GDBARCH to SIGNAL_FRAME_P.  */
593
594 void
595 dwarf2_frame_set_signal_frame_p (struct gdbarch *gdbarch,
596                                  int (*signal_frame_p) (struct gdbarch *,
597                                                         struct frame_info *))
598 {
599   struct dwarf2_frame_ops *ops = gdbarch_data (gdbarch, dwarf2_frame_data);
600
601   ops->signal_frame_p = signal_frame_p;
602 }
603
604 /* Query the architecture-specific signal frame recognizer for
605    NEXT_FRAME.  */
606
607 static int
608 dwarf2_frame_signal_frame_p (struct gdbarch *gdbarch,
609                              struct frame_info *next_frame)
610 {
611   struct dwarf2_frame_ops *ops = gdbarch_data (gdbarch, dwarf2_frame_data);
612
613   if (ops->signal_frame_p == NULL)
614     return 0;
615   return ops->signal_frame_p (gdbarch, next_frame);
616 }
617 \f
618
619 struct dwarf2_frame_cache
620 {
621   /* DWARF Call Frame Address.  */
622   CORE_ADDR cfa;
623
624   /* Set if the return address column was marked as undefined.  */
625   int undefined_retaddr;
626
627   /* Saved registers, indexed by GDB register number, not by DWARF
628      register number.  */
629   struct dwarf2_frame_state_reg *reg;
630
631   /* Return address register.  */
632   struct dwarf2_frame_state_reg retaddr_reg;
633 };
634
635 static struct dwarf2_frame_cache *
636 dwarf2_frame_cache (struct frame_info *next_frame, void **this_cache)
637 {
638   struct cleanup *old_chain;
639   struct gdbarch *gdbarch = get_frame_arch (next_frame);
640   const int num_regs = NUM_REGS + NUM_PSEUDO_REGS;
641   struct dwarf2_frame_cache *cache;
642   struct dwarf2_frame_state *fs;
643   struct dwarf2_fde *fde;
644
645   if (*this_cache)
646     return *this_cache;
647
648   /* Allocate a new cache.  */
649   cache = FRAME_OBSTACK_ZALLOC (struct dwarf2_frame_cache);
650   cache->reg = FRAME_OBSTACK_CALLOC (num_regs, struct dwarf2_frame_state_reg);
651
652   /* Allocate and initialize the frame state.  */
653   fs = XMALLOC (struct dwarf2_frame_state);
654   memset (fs, 0, sizeof (struct dwarf2_frame_state));
655   old_chain = make_cleanup (dwarf2_frame_state_free, fs);
656
657   /* Unwind the PC.
658
659      Note that if NEXT_FRAME is never supposed to return (i.e. a call
660      to abort), the compiler might optimize away the instruction at
661      NEXT_FRAME's return address.  As a result the return address will
662      point at some random instruction, and the CFI for that
663      instruction is probably worthless to us.  GCC's unwinder solves
664      this problem by substracting 1 from the return address to get an
665      address in the middle of a presumed call instruction (or the
666      instruction in the associated delay slot).  This should only be
667      done for "normal" frames and not for resume-type frames (signal
668      handlers, sentinel frames, dummy frames).  The function
669      frame_unwind_address_in_block does just this.  It's not clear how
670      reliable the method is though; there is the potential for the
671      register state pre-call being different to that on return.  */
672   fs->pc = frame_unwind_address_in_block (next_frame);
673
674   /* Find the correct FDE.  */
675   fde = dwarf2_frame_find_fde (&fs->pc);
676   gdb_assert (fde != NULL);
677
678   /* Extract any interesting information from the CIE.  */
679   fs->data_align = fde->cie->data_alignment_factor;
680   fs->code_align = fde->cie->code_alignment_factor;
681   fs->retaddr_column = fde->cie->return_address_register;
682
683   /* First decode all the insns in the CIE.  */
684   execute_cfa_program (fde->cie->initial_instructions,
685                        fde->cie->end, next_frame, fs);
686
687   /* Save the initialized register set.  */
688   fs->initial = fs->regs;
689   fs->initial.reg = dwarf2_frame_state_copy_regs (&fs->regs);
690
691   /* Then decode the insns in the FDE up to our target PC.  */
692   execute_cfa_program (fde->instructions, fde->end, next_frame, fs);
693
694   /* Caclulate the CFA.  */
695   switch (fs->cfa_how)
696     {
697     case CFA_REG_OFFSET:
698       cache->cfa = read_reg (next_frame, fs->cfa_reg);
699       cache->cfa += fs->cfa_offset;
700       break;
701
702     case CFA_EXP:
703       cache->cfa =
704         execute_stack_op (fs->cfa_exp, fs->cfa_exp_len, next_frame, 0);
705       break;
706
707     default:
708       internal_error (__FILE__, __LINE__, _("Unknown CFA rule."));
709     }
710
711   /* Initialize the register state.  */
712   {
713     int regnum;
714
715     for (regnum = 0; regnum < num_regs; regnum++)
716       dwarf2_frame_init_reg (gdbarch, regnum, &cache->reg[regnum]);
717   }
718
719   /* Go through the DWARF2 CFI generated table and save its register
720      location information in the cache.  Note that we don't skip the
721      return address column; it's perfectly all right for it to
722      correspond to a real register.  If it doesn't correspond to a
723      real register, or if we shouldn't treat it as such,
724      DWARF2_REG_TO_REGNUM should be defined to return a number outside
725      the range [0, NUM_REGS).  */
726   {
727     int column;         /* CFI speak for "register number".  */
728
729     for (column = 0; column < fs->regs.num_regs; column++)
730       {
731         /* Use the GDB register number as the destination index.  */
732         int regnum = DWARF2_REG_TO_REGNUM (column);
733
734         /* If there's no corresponding GDB register, ignore it.  */
735         if (regnum < 0 || regnum >= num_regs)
736           continue;
737
738         /* NOTE: cagney/2003-09-05: CFI should specify the disposition
739            of all debug info registers.  If it doesn't, complain (but
740            not too loudly).  It turns out that GCC assumes that an
741            unspecified register implies "same value" when CFI (draft
742            7) specifies nothing at all.  Such a register could equally
743            be interpreted as "undefined".  Also note that this check
744            isn't sufficient; it only checks that all registers in the
745            range [0 .. max column] are specified, and won't detect
746            problems when a debug info register falls outside of the
747            table.  We need a way of iterating through all the valid
748            DWARF2 register numbers.  */
749         if (fs->regs.reg[column].how == DWARF2_FRAME_REG_UNSPECIFIED)
750           {
751             if (cache->reg[regnum].how == DWARF2_FRAME_REG_UNSPECIFIED)
752               complaint (&symfile_complaints, _("\
753 incomplete CFI data; unspecified registers (e.g., %s) at 0x%s"),
754                          gdbarch_register_name (gdbarch, regnum),
755                          paddr_nz (fs->pc));
756           }
757         else
758           cache->reg[regnum] = fs->regs.reg[column];
759       }
760   }
761
762   /* Eliminate any DWARF2_FRAME_REG_RA rules, and save the information
763      we need for evaluating DWARF2_FRAME_REG_RA_OFFSET rules.  */
764   {
765     int regnum;
766
767     for (regnum = 0; regnum < num_regs; regnum++)
768       {
769         if (cache->reg[regnum].how == DWARF2_FRAME_REG_RA
770             || cache->reg[regnum].how == DWARF2_FRAME_REG_RA_OFFSET)
771           {
772             struct dwarf2_frame_state_reg *retaddr_reg =
773               &fs->regs.reg[fs->retaddr_column];
774
775             /* It seems rather bizarre to specify an "empty" column as
776                the return adress column.  However, this is exactly
777                what GCC does on some targets.  It turns out that GCC
778                assumes that the return address can be found in the
779                register corresponding to the return address column.
780                Incidentally, that's how we should treat a return
781                address column specifying "same value" too.  */
782             if (fs->retaddr_column < fs->regs.num_regs
783                 && retaddr_reg->how != DWARF2_FRAME_REG_UNSPECIFIED
784                 && retaddr_reg->how != DWARF2_FRAME_REG_SAME_VALUE)
785               {
786                 if (cache->reg[regnum].how == DWARF2_FRAME_REG_RA)
787                   cache->reg[regnum] = *retaddr_reg;
788                 else
789                   cache->retaddr_reg = *retaddr_reg;
790               }
791             else
792               {
793                 if (cache->reg[regnum].how == DWARF2_FRAME_REG_RA)
794                   {
795                     cache->reg[regnum].loc.reg = fs->retaddr_column;
796                     cache->reg[regnum].how = DWARF2_FRAME_REG_SAVED_REG;
797                   }
798                 else
799                   {
800                     cache->retaddr_reg.loc.reg = fs->retaddr_column;
801                     cache->retaddr_reg.how = DWARF2_FRAME_REG_SAVED_REG;
802                   }
803               }
804           }
805       }
806   }
807
808   if (fs->retaddr_column < fs->regs.num_regs
809       && fs->regs.reg[fs->retaddr_column].how == DWARF2_FRAME_REG_UNDEFINED)
810     cache->undefined_retaddr = 1;
811
812   do_cleanups (old_chain);
813
814   *this_cache = cache;
815   return cache;
816 }
817
818 static void
819 dwarf2_frame_this_id (struct frame_info *next_frame, void **this_cache,
820                       struct frame_id *this_id)
821 {
822   struct dwarf2_frame_cache *cache =
823     dwarf2_frame_cache (next_frame, this_cache);
824
825   if (cache->undefined_retaddr)
826     return;
827
828   (*this_id) = frame_id_build (cache->cfa, frame_func_unwind (next_frame));
829 }
830
831 static void
832 dwarf2_frame_prev_register (struct frame_info *next_frame, void **this_cache,
833                             int regnum, int *optimizedp,
834                             enum lval_type *lvalp, CORE_ADDR *addrp,
835                             int *realnump, gdb_byte *valuep)
836 {
837   struct gdbarch *gdbarch = get_frame_arch (next_frame);
838   struct dwarf2_frame_cache *cache =
839     dwarf2_frame_cache (next_frame, this_cache);
840
841   switch (cache->reg[regnum].how)
842     {
843     case DWARF2_FRAME_REG_UNDEFINED:
844       /* If CFI explicitly specified that the value isn't defined,
845          mark it as optimized away; the value isn't available.  */
846       *optimizedp = 1;
847       *lvalp = not_lval;
848       *addrp = 0;
849       *realnump = -1;
850       if (valuep)
851         {
852           /* In some cases, for example %eflags on the i386, we have
853              to provide a sane value, even though this register wasn't
854              saved.  Assume we can get it from NEXT_FRAME.  */
855           frame_unwind_register (next_frame, regnum, valuep);
856         }
857       break;
858
859     case DWARF2_FRAME_REG_SAVED_OFFSET:
860       *optimizedp = 0;
861       *lvalp = lval_memory;
862       *addrp = cache->cfa + cache->reg[regnum].loc.offset;
863       *realnump = -1;
864       if (valuep)
865         {
866           /* Read the value in from memory.  */
867           read_memory (*addrp, valuep, register_size (gdbarch, regnum));
868         }
869       break;
870
871     case DWARF2_FRAME_REG_SAVED_REG:
872       *optimizedp = 0;
873       *lvalp = lval_register;
874       *addrp = 0;
875       *realnump = DWARF2_REG_TO_REGNUM (cache->reg[regnum].loc.reg);
876       if (valuep)
877         frame_unwind_register (next_frame, (*realnump), valuep);
878       break;
879
880     case DWARF2_FRAME_REG_SAVED_EXP:
881       *optimizedp = 0;
882       *lvalp = lval_memory;
883       *addrp = execute_stack_op (cache->reg[regnum].loc.exp,
884                                  cache->reg[regnum].exp_len,
885                                  next_frame, cache->cfa);
886       *realnump = -1;
887       if (valuep)
888         {
889           /* Read the value in from memory.  */
890           read_memory (*addrp, valuep, register_size (gdbarch, regnum));
891         }
892       break;
893
894     case DWARF2_FRAME_REG_UNSPECIFIED:
895       /* GCC, in its infinite wisdom decided to not provide unwind
896          information for registers that are "same value".  Since
897          DWARF2 (3 draft 7) doesn't define such behavior, said
898          registers are actually undefined (which is different to CFI
899          "undefined").  Code above issues a complaint about this.
900          Here just fudge the books, assume GCC, and that the value is
901          more inner on the stack.  */
902       *optimizedp = 0;
903       *lvalp = lval_register;
904       *addrp = 0;
905       *realnump = regnum;
906       if (valuep)
907         frame_unwind_register (next_frame, (*realnump), valuep);
908       break;
909
910     case DWARF2_FRAME_REG_SAME_VALUE:
911       *optimizedp = 0;
912       *lvalp = lval_register;
913       *addrp = 0;
914       *realnump = regnum;
915       if (valuep)
916         frame_unwind_register (next_frame, (*realnump), valuep);
917       break;
918
919     case DWARF2_FRAME_REG_CFA:
920       *optimizedp = 0;
921       *lvalp = not_lval;
922       *addrp = 0;
923       *realnump = -1;
924       if (valuep)
925         {
926           /* Store the value.  */
927           store_typed_address (valuep, builtin_type_void_data_ptr, cache->cfa);
928         }
929       break;
930
931     case DWARF2_FRAME_REG_RA_OFFSET:
932       *optimizedp = 0;
933       *lvalp = not_lval;
934       *addrp = 0;
935       *realnump = -1;
936       if (valuep)
937         {
938           CORE_ADDR pc = cache->reg[regnum].loc.offset;
939
940           regnum = DWARF2_REG_TO_REGNUM (cache->retaddr_reg.loc.reg);
941           pc += frame_unwind_register_unsigned (next_frame, regnum);
942           store_typed_address (valuep, builtin_type_void_func_ptr, pc);
943         }
944       break;
945
946     default:
947       internal_error (__FILE__, __LINE__, _("Unknown register rule."));
948     }
949 }
950
951 static const struct frame_unwind dwarf2_frame_unwind =
952 {
953   NORMAL_FRAME,
954   dwarf2_frame_this_id,
955   dwarf2_frame_prev_register
956 };
957
958 static const struct frame_unwind dwarf2_signal_frame_unwind =
959 {
960   SIGTRAMP_FRAME,
961   dwarf2_frame_this_id,
962   dwarf2_frame_prev_register
963 };
964
965 const struct frame_unwind *
966 dwarf2_frame_sniffer (struct frame_info *next_frame)
967 {
968   /* Grab an address that is guarenteed to reside somewhere within the
969      function.  frame_pc_unwind(), for a no-return next function, can
970      end up returning something past the end of this function's body.  */
971   CORE_ADDR block_addr = frame_unwind_address_in_block (next_frame);
972   if (!dwarf2_frame_find_fde (&block_addr))
973     return NULL;
974
975   /* On some targets, signal trampolines may have unwind information.
976      We need to recognize them so that we set the frame type
977      correctly.  */
978
979   if (dwarf2_frame_signal_frame_p (get_frame_arch (next_frame),
980                                    next_frame))
981     return &dwarf2_signal_frame_unwind;
982
983   return &dwarf2_frame_unwind;
984 }
985 \f
986
987 /* There is no explicitly defined relationship between the CFA and the
988    location of frame's local variables and arguments/parameters.
989    Therefore, frame base methods on this page should probably only be
990    used as a last resort, just to avoid printing total garbage as a
991    response to the "info frame" command.  */
992
993 static CORE_ADDR
994 dwarf2_frame_base_address (struct frame_info *next_frame, void **this_cache)
995 {
996   struct dwarf2_frame_cache *cache =
997     dwarf2_frame_cache (next_frame, this_cache);
998
999   return cache->cfa;
1000 }
1001
1002 static const struct frame_base dwarf2_frame_base =
1003 {
1004   &dwarf2_frame_unwind,
1005   dwarf2_frame_base_address,
1006   dwarf2_frame_base_address,
1007   dwarf2_frame_base_address
1008 };
1009
1010 const struct frame_base *
1011 dwarf2_frame_base_sniffer (struct frame_info *next_frame)
1012 {
1013   CORE_ADDR pc = frame_pc_unwind (next_frame);
1014   if (dwarf2_frame_find_fde (&pc))
1015     return &dwarf2_frame_base;
1016
1017   return NULL;
1018 }
1019 \f
1020 /* A minimal decoding of DWARF2 compilation units.  We only decode
1021    what's needed to get to the call frame information.  */
1022
1023 struct comp_unit
1024 {
1025   /* Keep the bfd convenient.  */
1026   bfd *abfd;
1027
1028   struct objfile *objfile;
1029
1030   /* Linked list of CIEs for this object.  */
1031   struct dwarf2_cie *cie;
1032
1033   /* Pointer to the .debug_frame section loaded into memory.  */
1034   gdb_byte *dwarf_frame_buffer;
1035
1036   /* Length of the loaded .debug_frame section.  */
1037   unsigned long dwarf_frame_size;
1038
1039   /* Pointer to the .debug_frame section.  */
1040   asection *dwarf_frame_section;
1041
1042   /* Base for DW_EH_PE_datarel encodings.  */
1043   bfd_vma dbase;
1044
1045   /* Base for DW_EH_PE_textrel encodings.  */
1046   bfd_vma tbase;
1047 };
1048
1049 const struct objfile_data *dwarf2_frame_objfile_data;
1050
1051 static unsigned int
1052 read_1_byte (bfd *abfd, gdb_byte *buf)
1053 {
1054   return bfd_get_8 (abfd, buf);
1055 }
1056
1057 static unsigned int
1058 read_4_bytes (bfd *abfd, gdb_byte *buf)
1059 {
1060   return bfd_get_32 (abfd, buf);
1061 }
1062
1063 static ULONGEST
1064 read_8_bytes (bfd *abfd, gdb_byte *buf)
1065 {
1066   return bfd_get_64 (abfd, buf);
1067 }
1068
1069 static ULONGEST
1070 read_unsigned_leb128 (bfd *abfd, gdb_byte *buf, unsigned int *bytes_read_ptr)
1071 {
1072   ULONGEST result;
1073   unsigned int num_read;
1074   int shift;
1075   gdb_byte byte;
1076
1077   result = 0;
1078   shift = 0;
1079   num_read = 0;
1080
1081   do
1082     {
1083       byte = bfd_get_8 (abfd, (bfd_byte *) buf);
1084       buf++;
1085       num_read++;
1086       result |= ((byte & 0x7f) << shift);
1087       shift += 7;
1088     }
1089   while (byte & 0x80);
1090
1091   *bytes_read_ptr = num_read;
1092
1093   return result;
1094 }
1095
1096 static LONGEST
1097 read_signed_leb128 (bfd *abfd, gdb_byte *buf, unsigned int *bytes_read_ptr)
1098 {
1099   LONGEST result;
1100   int shift;
1101   unsigned int num_read;
1102   gdb_byte byte;
1103
1104   result = 0;
1105   shift = 0;
1106   num_read = 0;
1107
1108   do
1109     {
1110       byte = bfd_get_8 (abfd, (bfd_byte *) buf);
1111       buf++;
1112       num_read++;
1113       result |= ((byte & 0x7f) << shift);
1114       shift += 7;
1115     }
1116   while (byte & 0x80);
1117
1118   if (shift < 8 * sizeof (result) && (byte & 0x40))
1119     result |= -(((LONGEST)1) << shift);
1120
1121   *bytes_read_ptr = num_read;
1122
1123   return result;
1124 }
1125
1126 static ULONGEST
1127 read_initial_length (bfd *abfd, gdb_byte *buf, unsigned int *bytes_read_ptr)
1128 {
1129   LONGEST result;
1130
1131   result = bfd_get_32 (abfd, buf);
1132   if (result == 0xffffffff)
1133     {
1134       result = bfd_get_64 (abfd, buf + 4);
1135       *bytes_read_ptr = 12;
1136     }
1137   else
1138     *bytes_read_ptr = 4;
1139
1140   return result;
1141 }
1142 \f
1143
1144 /* Pointer encoding helper functions.  */
1145
1146 /* GCC supports exception handling based on DWARF2 CFI.  However, for
1147    technical reasons, it encodes addresses in its FDE's in a different
1148    way.  Several "pointer encodings" are supported.  The encoding
1149    that's used for a particular FDE is determined by the 'R'
1150    augmentation in the associated CIE.  The argument of this
1151    augmentation is a single byte.  
1152
1153    The address can be encoded as 2 bytes, 4 bytes, 8 bytes, or as a
1154    LEB128.  This is encoded in bits 0, 1 and 2.  Bit 3 encodes whether
1155    the address is signed or unsigned.  Bits 4, 5 and 6 encode how the
1156    address should be interpreted (absolute, relative to the current
1157    position in the FDE, ...).  Bit 7, indicates that the address
1158    should be dereferenced.  */
1159
1160 static gdb_byte
1161 encoding_for_size (unsigned int size)
1162 {
1163   switch (size)
1164     {
1165     case 2:
1166       return DW_EH_PE_udata2;
1167     case 4:
1168       return DW_EH_PE_udata4;
1169     case 8:
1170       return DW_EH_PE_udata8;
1171     default:
1172       internal_error (__FILE__, __LINE__, _("Unsupported address size"));
1173     }
1174 }
1175
1176 static unsigned int
1177 size_of_encoded_value (gdb_byte encoding)
1178 {
1179   if (encoding == DW_EH_PE_omit)
1180     return 0;
1181
1182   switch (encoding & 0x07)
1183     {
1184     case DW_EH_PE_absptr:
1185       return TYPE_LENGTH (builtin_type_void_data_ptr);
1186     case DW_EH_PE_udata2:
1187       return 2;
1188     case DW_EH_PE_udata4:
1189       return 4;
1190     case DW_EH_PE_udata8:
1191       return 8;
1192     default:
1193       internal_error (__FILE__, __LINE__, _("Invalid or unsupported encoding"));
1194     }
1195 }
1196
1197 static CORE_ADDR
1198 read_encoded_value (struct comp_unit *unit, gdb_byte encoding,
1199                     gdb_byte *buf, unsigned int *bytes_read_ptr)
1200 {
1201   int ptr_len = size_of_encoded_value (DW_EH_PE_absptr);
1202   ptrdiff_t offset;
1203   CORE_ADDR base;
1204
1205   /* GCC currently doesn't generate DW_EH_PE_indirect encodings for
1206      FDE's.  */
1207   if (encoding & DW_EH_PE_indirect)
1208     internal_error (__FILE__, __LINE__, 
1209                     _("Unsupported encoding: DW_EH_PE_indirect"));
1210
1211   *bytes_read_ptr = 0;
1212
1213   switch (encoding & 0x70)
1214     {
1215     case DW_EH_PE_absptr:
1216       base = 0;
1217       break;
1218     case DW_EH_PE_pcrel:
1219       base = bfd_get_section_vma (unit->bfd, unit->dwarf_frame_section);
1220       base += (buf - unit->dwarf_frame_buffer);
1221       break;
1222     case DW_EH_PE_datarel:
1223       base = unit->dbase;
1224       break;
1225     case DW_EH_PE_textrel:
1226       base = unit->tbase;
1227       break;
1228     case DW_EH_PE_funcrel:
1229       /* FIXME: kettenis/20040501: For now just pretend
1230          DW_EH_PE_funcrel is equivalent to DW_EH_PE_absptr.  For
1231          reading the initial location of an FDE it should be treated
1232          as such, and currently that's the only place where this code
1233          is used.  */
1234       base = 0;
1235       break;
1236     case DW_EH_PE_aligned:
1237       base = 0;
1238       offset = buf - unit->dwarf_frame_buffer;
1239       if ((offset % ptr_len) != 0)
1240         {
1241           *bytes_read_ptr = ptr_len - (offset % ptr_len);
1242           buf += *bytes_read_ptr;
1243         }
1244       break;
1245     default:
1246       internal_error (__FILE__, __LINE__, _("Invalid or unsupported encoding"));
1247     }
1248
1249   if ((encoding & 0x07) == 0x00)
1250     encoding |= encoding_for_size (ptr_len);
1251
1252   switch (encoding & 0x0f)
1253     {
1254     case DW_EH_PE_uleb128:
1255       {
1256         ULONGEST value;
1257         gdb_byte *end_buf = buf + (sizeof (value) + 1) * 8 / 7;
1258         *bytes_read_ptr += read_uleb128 (buf, end_buf, &value) - buf;
1259         return base + value;
1260       }
1261     case DW_EH_PE_udata2:
1262       *bytes_read_ptr += 2;
1263       return (base + bfd_get_16 (unit->abfd, (bfd_byte *) buf));
1264     case DW_EH_PE_udata4:
1265       *bytes_read_ptr += 4;
1266       return (base + bfd_get_32 (unit->abfd, (bfd_byte *) buf));
1267     case DW_EH_PE_udata8:
1268       *bytes_read_ptr += 8;
1269       return (base + bfd_get_64 (unit->abfd, (bfd_byte *) buf));
1270     case DW_EH_PE_sleb128:
1271       {
1272         LONGEST value;
1273         gdb_byte *end_buf = buf + (sizeof (value) + 1) * 8 / 7;
1274         *bytes_read_ptr += read_sleb128 (buf, end_buf, &value) - buf;
1275         return base + value;
1276       }
1277     case DW_EH_PE_sdata2:
1278       *bytes_read_ptr += 2;
1279       return (base + bfd_get_signed_16 (unit->abfd, (bfd_byte *) buf));
1280     case DW_EH_PE_sdata4:
1281       *bytes_read_ptr += 4;
1282       return (base + bfd_get_signed_32 (unit->abfd, (bfd_byte *) buf));
1283     case DW_EH_PE_sdata8:
1284       *bytes_read_ptr += 8;
1285       return (base + bfd_get_signed_64 (unit->abfd, (bfd_byte *) buf));
1286     default:
1287       internal_error (__FILE__, __LINE__, _("Invalid or unsupported encoding"));
1288     }
1289 }
1290 \f
1291
1292 /* GCC uses a single CIE for all FDEs in a .debug_frame section.
1293    That's why we use a simple linked list here.  */
1294
1295 static struct dwarf2_cie *
1296 find_cie (struct comp_unit *unit, ULONGEST cie_pointer)
1297 {
1298   struct dwarf2_cie *cie = unit->cie;
1299
1300   while (cie)
1301     {
1302       if (cie->cie_pointer == cie_pointer)
1303         return cie;
1304
1305       cie = cie->next;
1306     }
1307
1308   return NULL;
1309 }
1310
1311 static void
1312 add_cie (struct comp_unit *unit, struct dwarf2_cie *cie)
1313 {
1314   cie->next = unit->cie;
1315   unit->cie = cie;
1316 }
1317
1318 /* Find the FDE for *PC.  Return a pointer to the FDE, and store the
1319    inital location associated with it into *PC.  */
1320
1321 static struct dwarf2_fde *
1322 dwarf2_frame_find_fde (CORE_ADDR *pc)
1323 {
1324   struct objfile *objfile;
1325
1326   ALL_OBJFILES (objfile)
1327     {
1328       struct dwarf2_fde *fde;
1329       CORE_ADDR offset;
1330
1331       fde = objfile_data (objfile, dwarf2_frame_objfile_data);
1332       if (fde == NULL)
1333         continue;
1334
1335       gdb_assert (objfile->section_offsets);
1336       offset = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
1337
1338       while (fde)
1339         {
1340           if (*pc >= fde->initial_location + offset
1341               && *pc < fde->initial_location + offset + fde->address_range)
1342             {
1343               *pc = fde->initial_location + offset;
1344               return fde;
1345             }
1346
1347           fde = fde->next;
1348         }
1349     }
1350
1351   return NULL;
1352 }
1353
1354 static void
1355 add_fde (struct comp_unit *unit, struct dwarf2_fde *fde)
1356 {
1357   fde->next = objfile_data (unit->objfile, dwarf2_frame_objfile_data);
1358   set_objfile_data (unit->objfile, dwarf2_frame_objfile_data, fde);
1359 }
1360
1361 #ifdef CC_HAS_LONG_LONG
1362 #define DW64_CIE_ID 0xffffffffffffffffULL
1363 #else
1364 #define DW64_CIE_ID ~0
1365 #endif
1366
1367 static gdb_byte *decode_frame_entry (struct comp_unit *unit, gdb_byte *start,
1368                                      int eh_frame_p);
1369
1370 /* Decode the next CIE or FDE.  Return NULL if invalid input, otherwise
1371    the next byte to be processed.  */
1372 static gdb_byte *
1373 decode_frame_entry_1 (struct comp_unit *unit, gdb_byte *start, int eh_frame_p)
1374 {
1375   gdb_byte *buf, *end;
1376   LONGEST length;
1377   unsigned int bytes_read;
1378   int dwarf64_p;
1379   ULONGEST cie_id;
1380   ULONGEST cie_pointer;
1381
1382   buf = start;
1383   length = read_initial_length (unit->abfd, buf, &bytes_read);
1384   buf += bytes_read;
1385   end = buf + length;
1386
1387   /* Are we still within the section? */
1388   if (end > unit->dwarf_frame_buffer + unit->dwarf_frame_size)
1389     return NULL;
1390
1391   if (length == 0)
1392     return end;
1393
1394   /* Distinguish between 32 and 64-bit encoded frame info.  */
1395   dwarf64_p = (bytes_read == 12);
1396
1397   /* In a .eh_frame section, zero is used to distinguish CIEs from FDEs.  */
1398   if (eh_frame_p)
1399     cie_id = 0;
1400   else if (dwarf64_p)
1401     cie_id = DW64_CIE_ID;
1402   else
1403     cie_id = DW_CIE_ID;
1404
1405   if (dwarf64_p)
1406     {
1407       cie_pointer = read_8_bytes (unit->abfd, buf);
1408       buf += 8;
1409     }
1410   else
1411     {
1412       cie_pointer = read_4_bytes (unit->abfd, buf);
1413       buf += 4;
1414     }
1415
1416   if (cie_pointer == cie_id)
1417     {
1418       /* This is a CIE.  */
1419       struct dwarf2_cie *cie;
1420       char *augmentation;
1421       unsigned int cie_version;
1422
1423       /* Record the offset into the .debug_frame section of this CIE.  */
1424       cie_pointer = start - unit->dwarf_frame_buffer;
1425
1426       /* Check whether we've already read it.  */
1427       if (find_cie (unit, cie_pointer))
1428         return end;
1429
1430       cie = (struct dwarf2_cie *)
1431         obstack_alloc (&unit->objfile->objfile_obstack,
1432                        sizeof (struct dwarf2_cie));
1433       cie->initial_instructions = NULL;
1434       cie->cie_pointer = cie_pointer;
1435
1436       /* The encoding for FDE's in a normal .debug_frame section
1437          depends on the target address size.  */
1438       cie->encoding = DW_EH_PE_absptr;
1439
1440       /* Check version number.  */
1441       cie_version = read_1_byte (unit->abfd, buf);
1442       if (cie_version != 1 && cie_version != 3)
1443         return NULL;
1444       buf += 1;
1445
1446       /* Interpret the interesting bits of the augmentation.  */
1447       augmentation = (char *) buf;
1448       buf += (strlen (augmentation) + 1);
1449
1450       /* The GCC 2.x "eh" augmentation has a pointer immediately
1451          following the augmentation string, so it must be handled
1452          first.  */
1453       if (augmentation[0] == 'e' && augmentation[1] == 'h')
1454         {
1455           /* Skip.  */
1456           buf += TYPE_LENGTH (builtin_type_void_data_ptr);
1457           augmentation += 2;
1458         }
1459
1460       cie->code_alignment_factor =
1461         read_unsigned_leb128 (unit->abfd, buf, &bytes_read);
1462       buf += bytes_read;
1463
1464       cie->data_alignment_factor =
1465         read_signed_leb128 (unit->abfd, buf, &bytes_read);
1466       buf += bytes_read;
1467
1468       if (cie_version == 1)
1469         {
1470           cie->return_address_register = read_1_byte (unit->abfd, buf);
1471           bytes_read = 1;
1472         }
1473       else
1474         cie->return_address_register = read_unsigned_leb128 (unit->abfd, buf,
1475                                                              &bytes_read);
1476       buf += bytes_read;
1477
1478       cie->saw_z_augmentation = (*augmentation == 'z');
1479       if (cie->saw_z_augmentation)
1480         {
1481           ULONGEST length;
1482
1483           length = read_unsigned_leb128 (unit->abfd, buf, &bytes_read);
1484           buf += bytes_read;
1485           if (buf > end)
1486             return NULL;
1487           cie->initial_instructions = buf + length;
1488           augmentation++;
1489         }
1490
1491       while (*augmentation)
1492         {
1493           /* "L" indicates a byte showing how the LSDA pointer is encoded.  */
1494           if (*augmentation == 'L')
1495             {
1496               /* Skip.  */
1497               buf++;
1498               augmentation++;
1499             }
1500
1501           /* "R" indicates a byte indicating how FDE addresses are encoded.  */
1502           else if (*augmentation == 'R')
1503             {
1504               cie->encoding = *buf++;
1505               augmentation++;
1506             }
1507
1508           /* "P" indicates a personality routine in the CIE augmentation.  */
1509           else if (*augmentation == 'P')
1510             {
1511               /* Skip.  Avoid indirection since we throw away the result.  */
1512               gdb_byte encoding = (*buf++) & ~DW_EH_PE_indirect;
1513               read_encoded_value (unit, encoding, buf, &bytes_read);
1514               buf += bytes_read;
1515               augmentation++;
1516             }
1517
1518           /* Otherwise we have an unknown augmentation.
1519              Bail out unless we saw a 'z' prefix.  */
1520           else
1521             {
1522               if (cie->initial_instructions == NULL)
1523                 return end;
1524
1525               /* Skip unknown augmentations.  */
1526               buf = cie->initial_instructions;
1527               break;
1528             }
1529         }
1530
1531       cie->initial_instructions = buf;
1532       cie->end = end;
1533
1534       add_cie (unit, cie);
1535     }
1536   else
1537     {
1538       /* This is a FDE.  */
1539       struct dwarf2_fde *fde;
1540
1541       /* In an .eh_frame section, the CIE pointer is the delta between the
1542          address within the FDE where the CIE pointer is stored and the
1543          address of the CIE.  Convert it to an offset into the .eh_frame
1544          section.  */
1545       if (eh_frame_p)
1546         {
1547           cie_pointer = buf - unit->dwarf_frame_buffer - cie_pointer;
1548           cie_pointer -= (dwarf64_p ? 8 : 4);
1549         }
1550
1551       /* In either case, validate the result is still within the section.  */
1552       if (cie_pointer >= unit->dwarf_frame_size)
1553         return NULL;
1554
1555       fde = (struct dwarf2_fde *)
1556         obstack_alloc (&unit->objfile->objfile_obstack,
1557                        sizeof (struct dwarf2_fde));
1558       fde->cie = find_cie (unit, cie_pointer);
1559       if (fde->cie == NULL)
1560         {
1561           decode_frame_entry (unit, unit->dwarf_frame_buffer + cie_pointer,
1562                               eh_frame_p);
1563           fde->cie = find_cie (unit, cie_pointer);
1564         }
1565
1566       gdb_assert (fde->cie != NULL);
1567
1568       fde->initial_location =
1569         read_encoded_value (unit, fde->cie->encoding, buf, &bytes_read);
1570       buf += bytes_read;
1571
1572       fde->address_range =
1573         read_encoded_value (unit, fde->cie->encoding & 0x0f, buf, &bytes_read);
1574       buf += bytes_read;
1575
1576       /* A 'z' augmentation in the CIE implies the presence of an
1577          augmentation field in the FDE as well.  The only thing known
1578          to be in here at present is the LSDA entry for EH.  So we
1579          can skip the whole thing.  */
1580       if (fde->cie->saw_z_augmentation)
1581         {
1582           ULONGEST length;
1583
1584           length = read_unsigned_leb128 (unit->abfd, buf, &bytes_read);
1585           buf += bytes_read + length;
1586           if (buf > end)
1587             return NULL;
1588         }
1589
1590       fde->instructions = buf;
1591       fde->end = end;
1592
1593       add_fde (unit, fde);
1594     }
1595
1596   return end;
1597 }
1598
1599 /* Read a CIE or FDE in BUF and decode it.  */
1600 static gdb_byte *
1601 decode_frame_entry (struct comp_unit *unit, gdb_byte *start, int eh_frame_p)
1602 {
1603   enum { NONE, ALIGN4, ALIGN8, FAIL } workaround = NONE;
1604   gdb_byte *ret;
1605   const char *msg;
1606   ptrdiff_t start_offset;
1607
1608   while (1)
1609     {
1610       ret = decode_frame_entry_1 (unit, start, eh_frame_p);
1611       if (ret != NULL)
1612         break;
1613
1614       /* We have corrupt input data of some form.  */
1615
1616       /* ??? Try, weakly, to work around compiler/assembler/linker bugs
1617          and mismatches wrt padding and alignment of debug sections.  */
1618       /* Note that there is no requirement in the standard for any
1619          alignment at all in the frame unwind sections.  Testing for
1620          alignment before trying to interpret data would be incorrect.
1621
1622          However, GCC traditionally arranged for frame sections to be
1623          sized such that the FDE length and CIE fields happen to be
1624          aligned (in theory, for performance).  This, unfortunately,
1625          was done with .align directives, which had the side effect of
1626          forcing the section to be aligned by the linker.
1627
1628          This becomes a problem when you have some other producer that
1629          creates frame sections that are not as strictly aligned.  That
1630          produces a hole in the frame info that gets filled by the 
1631          linker with zeros.
1632
1633          The GCC behaviour is arguably a bug, but it's effectively now
1634          part of the ABI, so we're now stuck with it, at least at the
1635          object file level.  A smart linker may decide, in the process
1636          of compressing duplicate CIE information, that it can rewrite
1637          the entire output section without this extra padding.  */
1638
1639       start_offset = start - unit->dwarf_frame_buffer;
1640       if (workaround < ALIGN4 && (start_offset & 3) != 0)
1641         {
1642           start += 4 - (start_offset & 3);
1643           workaround = ALIGN4;
1644           continue;
1645         }
1646       if (workaround < ALIGN8 && (start_offset & 7) != 0)
1647         {
1648           start += 8 - (start_offset & 7);
1649           workaround = ALIGN8;
1650           continue;
1651         }
1652
1653       /* Nothing left to try.  Arrange to return as if we've consumed
1654          the entire input section.  Hopefully we'll get valid info from
1655          the other of .debug_frame/.eh_frame.  */
1656       workaround = FAIL;
1657       ret = unit->dwarf_frame_buffer + unit->dwarf_frame_size;
1658       break;
1659     }
1660
1661   switch (workaround)
1662     {
1663     case NONE:
1664       break;
1665
1666     case ALIGN4:
1667       complaint (&symfile_complaints,
1668                  _("Corrupt data in %s:%s; align 4 workaround apparently succeeded"),
1669                  unit->dwarf_frame_section->owner->filename,
1670                  unit->dwarf_frame_section->name);
1671       break;
1672
1673     case ALIGN8:
1674       complaint (&symfile_complaints,
1675                  _("Corrupt data in %s:%s; align 8 workaround apparently succeeded"),
1676                  unit->dwarf_frame_section->owner->filename,
1677                  unit->dwarf_frame_section->name);
1678       break;
1679
1680     default:
1681       complaint (&symfile_complaints,
1682                  _("Corrupt data in %s:%s"),
1683                  unit->dwarf_frame_section->owner->filename,
1684                  unit->dwarf_frame_section->name);
1685       break;
1686     }
1687
1688   return ret;
1689 }
1690 \f
1691
1692 /* FIXME: kettenis/20030504: This still needs to be integrated with
1693    dwarf2read.c in a better way.  */
1694
1695 /* Imported from dwarf2read.c.  */
1696 extern asection *dwarf_frame_section;
1697 extern asection *dwarf_eh_frame_section;
1698
1699 /* Imported from dwarf2read.c.  */
1700 extern char *dwarf2_read_section (struct objfile *objfile, asection *sectp);
1701
1702 void
1703 dwarf2_build_frame_info (struct objfile *objfile)
1704 {
1705   struct comp_unit unit;
1706   gdb_byte *frame_ptr;
1707
1708   /* Build a minimal decoding of the DWARF2 compilation unit.  */
1709   unit.abfd = objfile->obfd;
1710   unit.objfile = objfile;
1711   unit.dbase = 0;
1712   unit.tbase = 0;
1713
1714   /* First add the information from the .eh_frame section.  That way,
1715      the FDEs from that section are searched last.  */
1716   if (dwarf_eh_frame_section)
1717     {
1718       asection *got, *txt;
1719
1720       unit.cie = NULL;
1721       unit.dwarf_frame_buffer = dwarf2_read_section (objfile,
1722                                                      dwarf_eh_frame_section);
1723
1724       unit.dwarf_frame_size = bfd_get_section_size (dwarf_eh_frame_section);
1725       unit.dwarf_frame_section = dwarf_eh_frame_section;
1726
1727       /* FIXME: kettenis/20030602: This is the DW_EH_PE_datarel base
1728          that is used for the i386/amd64 target, which currently is
1729          the only target in GCC that supports/uses the
1730          DW_EH_PE_datarel encoding.  */
1731       got = bfd_get_section_by_name (unit.abfd, ".got");
1732       if (got)
1733         unit.dbase = got->vma;
1734
1735       /* GCC emits the DW_EH_PE_textrel encoding type on sh and ia64
1736          so far.  */
1737       txt = bfd_get_section_by_name (unit.abfd, ".text");
1738       if (txt)
1739         unit.tbase = txt->vma;
1740
1741       frame_ptr = unit.dwarf_frame_buffer;
1742       while (frame_ptr < unit.dwarf_frame_buffer + unit.dwarf_frame_size)
1743         frame_ptr = decode_frame_entry (&unit, frame_ptr, 1);
1744     }
1745
1746   if (dwarf_frame_section)
1747     {
1748       unit.cie = NULL;
1749       unit.dwarf_frame_buffer = dwarf2_read_section (objfile,
1750                                                      dwarf_frame_section);
1751       unit.dwarf_frame_size = bfd_get_section_size (dwarf_frame_section);
1752       unit.dwarf_frame_section = dwarf_frame_section;
1753
1754       frame_ptr = unit.dwarf_frame_buffer;
1755       while (frame_ptr < unit.dwarf_frame_buffer + unit.dwarf_frame_size)
1756         frame_ptr = decode_frame_entry (&unit, frame_ptr, 0);
1757     }
1758 }
1759
1760 /* Provide a prototype to silence -Wmissing-prototypes.  */
1761 void _initialize_dwarf2_frame (void);
1762
1763 void
1764 _initialize_dwarf2_frame (void)
1765 {
1766   dwarf2_frame_data = gdbarch_data_register_pre_init (dwarf2_frame_init);
1767   dwarf2_frame_objfile_data = register_objfile_data ();
1768 }