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