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