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