2010-05-14 Michael Snyder <msnyder@vmware.com>
[external/binutils.git] / gdb / dwarf2-frame.c
1 /* Frame unwinder for frames with DWARF Call Frame Information.
2
3    Copyright (C) 2003, 2004, 2005, 2007, 2008, 2009, 2010
4    Free Software Foundation, Inc.
5
6    Contributed by Mark Kettenis.
7
8    This file is part of GDB.
9
10    This program is free software; you can redistribute it and/or modify
11    it under the terms of the GNU General Public License as published by
12    the Free Software Foundation; either version 3 of the License, or
13    (at your option) any later version.
14
15    This program is distributed in the hope that it will be useful,
16    but WITHOUT ANY WARRANTY; without even the implied warranty of
17    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18    GNU General Public License for more details.
19
20    You should have received a copy of the GNU General Public License
21    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
22
23 #include "defs.h"
24 #include "dwarf2expr.h"
25 #include "dwarf2.h"
26 #include "frame.h"
27 #include "frame-base.h"
28 #include "frame-unwind.h"
29 #include "gdbcore.h"
30 #include "gdbtypes.h"
31 #include "symtab.h"
32 #include "objfiles.h"
33 #include "regcache.h"
34 #include "value.h"
35
36 #include "gdb_assert.h"
37 #include "gdb_string.h"
38
39 #include "complaints.h"
40 #include "dwarf2-frame.h"
41
42 struct comp_unit;
43
44 /* Call Frame Information (CFI).  */
45
46 /* Common Information Entry (CIE).  */
47
48 struct dwarf2_cie
49 {
50   /* Computation Unit for this CIE.  */
51   struct comp_unit *unit;
52
53   /* Offset into the .debug_frame section where this CIE was found.
54      Used to identify this CIE.  */
55   ULONGEST cie_pointer;
56
57   /* Constant that is factored out of all advance location
58      instructions.  */
59   ULONGEST code_alignment_factor;
60
61   /* Constants that is factored out of all offset instructions.  */
62   LONGEST data_alignment_factor;
63
64   /* Return address column.  */
65   ULONGEST return_address_register;
66
67   /* Instruction sequence to initialize a register set.  */
68   gdb_byte *initial_instructions;
69   gdb_byte *end;
70
71   /* Saved augmentation, in case it's needed later.  */
72   char *augmentation;
73
74   /* Encoding of addresses.  */
75   gdb_byte encoding;
76
77   /* Target address size in bytes.  */
78   int addr_size;
79
80   /* True if a 'z' augmentation existed.  */
81   unsigned char saw_z_augmentation;
82
83   /* True if an 'S' augmentation existed.  */
84   unsigned char signal_frame;
85
86   /* The version recorded in the CIE.  */
87   unsigned char version;
88
89   /* The segment size.  */
90   unsigned char segment_size;
91 };
92
93 struct dwarf2_cie_table
94 {
95   int num_entries;
96   struct dwarf2_cie **entries;
97 };
98
99 /* Frame Description Entry (FDE).  */
100
101 struct dwarf2_fde
102 {
103   /* CIE for this FDE.  */
104   struct dwarf2_cie *cie;
105
106   /* First location associated with this FDE.  */
107   CORE_ADDR initial_location;
108
109   /* Number of bytes of program instructions described by this FDE.  */
110   CORE_ADDR address_range;
111
112   /* Instruction sequence.  */
113   gdb_byte *instructions;
114   gdb_byte *end;
115
116   /* True if this FDE is read from a .eh_frame instead of a .debug_frame
117      section.  */
118   unsigned char eh_frame_p;
119 };
120
121 struct dwarf2_fde_table
122 {
123   int num_entries;
124   struct dwarf2_fde **entries;
125 };
126
127 /* A minimal decoding of DWARF2 compilation units.  We only decode
128    what's needed to get to the call frame information.  */
129
130 struct comp_unit
131 {
132   /* Keep the bfd convenient.  */
133   bfd *abfd;
134
135   struct objfile *objfile;
136
137   /* Pointer to the .debug_frame section loaded into memory.  */
138   gdb_byte *dwarf_frame_buffer;
139
140   /* Length of the loaded .debug_frame section.  */
141   bfd_size_type dwarf_frame_size;
142
143   /* Pointer to the .debug_frame section.  */
144   asection *dwarf_frame_section;
145
146   /* Base for DW_EH_PE_datarel encodings.  */
147   bfd_vma dbase;
148
149   /* Base for DW_EH_PE_textrel encodings.  */
150   bfd_vma tbase;
151 };
152
153 static struct dwarf2_fde *dwarf2_frame_find_fde (CORE_ADDR *pc);
154
155 static int dwarf2_frame_adjust_regnum (struct gdbarch *gdbarch, int regnum,
156                                        int eh_frame_p);
157
158 static CORE_ADDR read_encoded_value (struct comp_unit *unit, gdb_byte encoding,
159                                      int ptr_len, gdb_byte *buf,
160                                      unsigned int *bytes_read_ptr,
161                                      CORE_ADDR func_base);
162 \f
163
164 /* Structure describing a frame state.  */
165
166 struct dwarf2_frame_state
167 {
168   /* Each register save state can be described in terms of a CFA slot,
169      another register, or a location expression.  */
170   struct dwarf2_frame_state_reg_info
171   {
172     struct dwarf2_frame_state_reg *reg;
173     int num_regs;
174
175     LONGEST cfa_offset;
176     ULONGEST cfa_reg;
177     enum {
178       CFA_UNSET,
179       CFA_REG_OFFSET,
180       CFA_EXP
181     } cfa_how;
182     gdb_byte *cfa_exp;
183
184     /* Used to implement DW_CFA_remember_state.  */
185     struct dwarf2_frame_state_reg_info *prev;
186   } regs;
187
188   /* The PC described by the current frame state.  */
189   CORE_ADDR pc;
190
191   /* Initial register set from the CIE.
192      Used to implement DW_CFA_restore.  */
193   struct dwarf2_frame_state_reg_info initial;
194
195   /* The information we care about from the CIE.  */
196   LONGEST data_align;
197   ULONGEST code_align;
198   ULONGEST retaddr_column;
199
200   /* Flags for known producer quirks.  */
201
202   /* The ARM compilers, in DWARF2 mode, assume that DW_CFA_def_cfa
203      and DW_CFA_def_cfa_offset takes a factored offset.  */
204   int armcc_cfa_offsets_sf;
205
206   /* The ARM compilers, in DWARF2 or DWARF3 mode, may assume that
207      the CFA is defined as REG - OFFSET rather than REG + OFFSET.  */
208   int armcc_cfa_offsets_reversed;
209 };
210
211 /* Store the length the expression for the CFA in the `cfa_reg' field,
212    which is unused in that case.  */
213 #define cfa_exp_len cfa_reg
214
215 /* Assert that the register set RS is large enough to store gdbarch_num_regs
216    columns.  If necessary, enlarge the register set.  */
217
218 static void
219 dwarf2_frame_state_alloc_regs (struct dwarf2_frame_state_reg_info *rs,
220                                int num_regs)
221 {
222   size_t size = sizeof (struct dwarf2_frame_state_reg);
223
224   if (num_regs <= rs->num_regs)
225     return;
226
227   rs->reg = (struct dwarf2_frame_state_reg *)
228     xrealloc (rs->reg, num_regs * size);
229
230   /* Initialize newly allocated registers.  */
231   memset (rs->reg + rs->num_regs, 0, (num_regs - rs->num_regs) * size);
232   rs->num_regs = num_regs;
233 }
234
235 /* Copy the register columns in register set RS into newly allocated
236    memory and return a pointer to this newly created copy.  */
237
238 static struct dwarf2_frame_state_reg *
239 dwarf2_frame_state_copy_regs (struct dwarf2_frame_state_reg_info *rs)
240 {
241   size_t size = rs->num_regs * sizeof (struct dwarf2_frame_state_reg);
242   struct dwarf2_frame_state_reg *reg;
243
244   reg = (struct dwarf2_frame_state_reg *) xmalloc (size);
245   memcpy (reg, rs->reg, size);
246
247   return reg;
248 }
249
250 /* Release the memory allocated to register set RS.  */
251
252 static void
253 dwarf2_frame_state_free_regs (struct dwarf2_frame_state_reg_info *rs)
254 {
255   if (rs)
256     {
257       dwarf2_frame_state_free_regs (rs->prev);
258
259       xfree (rs->reg);
260       xfree (rs);
261     }
262 }
263
264 /* Release the memory allocated to the frame state FS.  */
265
266 static void
267 dwarf2_frame_state_free (void *p)
268 {
269   struct dwarf2_frame_state *fs = p;
270
271   dwarf2_frame_state_free_regs (fs->initial.prev);
272   dwarf2_frame_state_free_regs (fs->regs.prev);
273   xfree (fs->initial.reg);
274   xfree (fs->regs.reg);
275   xfree (fs);
276 }
277 \f
278
279 /* Helper functions for execute_stack_op.  */
280
281 static CORE_ADDR
282 read_reg (void *baton, int reg)
283 {
284   struct frame_info *this_frame = (struct frame_info *) baton;
285   struct gdbarch *gdbarch = get_frame_arch (this_frame);
286   int regnum;
287   gdb_byte *buf;
288
289   regnum = gdbarch_dwarf2_reg_to_regnum (gdbarch, reg);
290
291   buf = alloca (register_size (gdbarch, regnum));
292   get_frame_register (this_frame, regnum, buf);
293
294   /* Convert the register to an integer.  This returns a LONGEST
295      rather than a CORE_ADDR, but unpack_pointer does the same thing
296      under the covers, and this makes more sense for non-pointer
297      registers.  Maybe read_reg and the associated interfaces should
298      deal with "struct value" instead of CORE_ADDR.  */
299   return unpack_long (register_type (gdbarch, regnum), buf);
300 }
301
302 static void
303 read_mem (void *baton, gdb_byte *buf, CORE_ADDR addr, size_t len)
304 {
305   read_memory (addr, buf, len);
306 }
307
308 static void
309 no_get_frame_base (void *baton, gdb_byte **start, size_t *length)
310 {
311   internal_error (__FILE__, __LINE__,
312                   _("Support for DW_OP_fbreg is unimplemented"));
313 }
314
315 /* Helper function for execute_stack_op.  */
316
317 static CORE_ADDR
318 no_get_frame_cfa (void *baton)
319 {
320   internal_error (__FILE__, __LINE__,
321                   _("Support for DW_OP_call_frame_cfa is unimplemented"));
322 }
323
324 static CORE_ADDR
325 no_get_tls_address (void *baton, CORE_ADDR offset)
326 {
327   internal_error (__FILE__, __LINE__,
328                   _("Support for DW_OP_GNU_push_tls_address is unimplemented"));
329 }
330
331 /* Execute the required actions for both the DW_CFA_restore and
332 DW_CFA_restore_extended instructions.  */
333 static void
334 dwarf2_restore_rule (struct gdbarch *gdbarch, ULONGEST reg_num,
335                      struct dwarf2_frame_state *fs, int eh_frame_p)
336 {
337   ULONGEST reg;
338
339   gdb_assert (fs->initial.reg);
340   reg = dwarf2_frame_adjust_regnum (gdbarch, reg_num, eh_frame_p);
341   dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
342
343   /* Check if this register was explicitly initialized in the
344   CIE initial instructions.  If not, default the rule to
345   UNSPECIFIED.  */
346   if (reg < fs->initial.num_regs)
347     fs->regs.reg[reg] = fs->initial.reg[reg];
348   else
349     fs->regs.reg[reg].how = DWARF2_FRAME_REG_UNSPECIFIED;
350
351   if (fs->regs.reg[reg].how == DWARF2_FRAME_REG_UNSPECIFIED)
352     complaint (&symfile_complaints, _("\
353 incomplete CFI data; DW_CFA_restore unspecified\n\
354 register %s (#%d) at %s"),
355                        gdbarch_register_name
356                        (gdbarch, gdbarch_dwarf2_reg_to_regnum (gdbarch, reg)),
357                        gdbarch_dwarf2_reg_to_regnum (gdbarch, reg),
358                        paddress (gdbarch, fs->pc));
359 }
360
361 static CORE_ADDR
362 execute_stack_op (gdb_byte *exp, ULONGEST len, int addr_size,
363                   struct frame_info *this_frame, CORE_ADDR initial,
364                   int initial_in_stack_memory)
365 {
366   struct dwarf_expr_context *ctx;
367   CORE_ADDR result;
368   struct cleanup *old_chain;
369
370   ctx = new_dwarf_expr_context ();
371   old_chain = make_cleanup_free_dwarf_expr_context (ctx);
372
373   ctx->gdbarch = get_frame_arch (this_frame);
374   ctx->addr_size = addr_size;
375   ctx->baton = this_frame;
376   ctx->read_reg = read_reg;
377   ctx->read_mem = read_mem;
378   ctx->get_frame_base = no_get_frame_base;
379   ctx->get_frame_cfa = no_get_frame_cfa;
380   ctx->get_tls_address = no_get_tls_address;
381
382   dwarf_expr_push (ctx, initial, initial_in_stack_memory);
383   dwarf_expr_eval (ctx, exp, len);
384   result = dwarf_expr_fetch (ctx, 0);
385
386   if (ctx->location == DWARF_VALUE_REGISTER)
387     result = read_reg (this_frame, result);
388   else if (ctx->location != DWARF_VALUE_MEMORY)
389     {
390       /* This is actually invalid DWARF, but if we ever do run across
391          it somehow, we might as well support it.  So, instead, report
392          it as unimplemented.  */
393       error (_("Not implemented: computing unwound register using explicit value operator"));
394     }
395
396   do_cleanups (old_chain);
397
398   return result;
399 }
400 \f
401
402 static void
403 execute_cfa_program (struct dwarf2_fde *fde, gdb_byte *insn_ptr,
404                      gdb_byte *insn_end, struct frame_info *this_frame,
405                      struct dwarf2_frame_state *fs)
406 {
407   int eh_frame_p = fde->eh_frame_p;
408   CORE_ADDR pc = get_frame_pc (this_frame);
409   int bytes_read;
410   struct gdbarch *gdbarch = get_frame_arch (this_frame);
411   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
412
413   while (insn_ptr < insn_end && fs->pc <= pc)
414     {
415       gdb_byte insn = *insn_ptr++;
416       ULONGEST utmp, reg;
417       LONGEST offset;
418
419       if ((insn & 0xc0) == DW_CFA_advance_loc)
420         fs->pc += (insn & 0x3f) * fs->code_align;
421       else if ((insn & 0xc0) == DW_CFA_offset)
422         {
423           reg = insn & 0x3f;
424           reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p);
425           insn_ptr = read_uleb128 (insn_ptr, insn_end, &utmp);
426           offset = utmp * fs->data_align;
427           dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
428           fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_OFFSET;
429           fs->regs.reg[reg].loc.offset = offset;
430         }
431       else if ((insn & 0xc0) == DW_CFA_restore)
432         {
433           reg = insn & 0x3f;
434           dwarf2_restore_rule (gdbarch, reg, fs, eh_frame_p);
435         }
436       else
437         {
438           switch (insn)
439             {
440             case DW_CFA_set_loc:
441               fs->pc = read_encoded_value (fde->cie->unit, fde->cie->encoding,
442                                            fde->cie->addr_size, insn_ptr,
443                                            &bytes_read, fde->initial_location);
444               /* Apply the objfile offset for relocatable objects.  */
445               fs->pc += ANOFFSET (fde->cie->unit->objfile->section_offsets,
446                                   SECT_OFF_TEXT (fde->cie->unit->objfile));
447               insn_ptr += bytes_read;
448               break;
449
450             case DW_CFA_advance_loc1:
451               utmp = extract_unsigned_integer (insn_ptr, 1, byte_order);
452               fs->pc += utmp * fs->code_align;
453               insn_ptr++;
454               break;
455             case DW_CFA_advance_loc2:
456               utmp = extract_unsigned_integer (insn_ptr, 2, byte_order);
457               fs->pc += utmp * fs->code_align;
458               insn_ptr += 2;
459               break;
460             case DW_CFA_advance_loc4:
461               utmp = extract_unsigned_integer (insn_ptr, 4, byte_order);
462               fs->pc += utmp * fs->code_align;
463               insn_ptr += 4;
464               break;
465
466             case DW_CFA_offset_extended:
467               insn_ptr = read_uleb128 (insn_ptr, insn_end, &reg);
468               reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p);
469               insn_ptr = read_uleb128 (insn_ptr, insn_end, &utmp);
470               offset = utmp * fs->data_align;
471               dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
472               fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_OFFSET;
473               fs->regs.reg[reg].loc.offset = offset;
474               break;
475
476             case DW_CFA_restore_extended:
477               insn_ptr = read_uleb128 (insn_ptr, insn_end, &reg);
478               dwarf2_restore_rule (gdbarch, reg, fs, eh_frame_p);
479               break;
480
481             case DW_CFA_undefined:
482               insn_ptr = read_uleb128 (insn_ptr, insn_end, &reg);
483               reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p);
484               dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
485               fs->regs.reg[reg].how = DWARF2_FRAME_REG_UNDEFINED;
486               break;
487
488             case DW_CFA_same_value:
489               insn_ptr = read_uleb128 (insn_ptr, insn_end, &reg);
490               reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p);
491               dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
492               fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAME_VALUE;
493               break;
494
495             case DW_CFA_register:
496               insn_ptr = read_uleb128 (insn_ptr, insn_end, &reg);
497               reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p);
498               insn_ptr = read_uleb128 (insn_ptr, insn_end, &utmp);
499               utmp = dwarf2_frame_adjust_regnum (gdbarch, utmp, eh_frame_p);
500               dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
501               fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_REG;
502               fs->regs.reg[reg].loc.reg = utmp;
503               break;
504
505             case DW_CFA_remember_state:
506               {
507                 struct dwarf2_frame_state_reg_info *new_rs;
508
509                 new_rs = XMALLOC (struct dwarf2_frame_state_reg_info);
510                 *new_rs = fs->regs;
511                 fs->regs.reg = dwarf2_frame_state_copy_regs (&fs->regs);
512                 fs->regs.prev = new_rs;
513               }
514               break;
515
516             case DW_CFA_restore_state:
517               {
518                 struct dwarf2_frame_state_reg_info *old_rs = fs->regs.prev;
519
520                 if (old_rs == NULL)
521                   {
522                     complaint (&symfile_complaints, _("\
523 bad CFI data; mismatched DW_CFA_restore_state at %s"),
524                                paddress (gdbarch, fs->pc));
525                   }
526                 else
527                   {
528                     xfree (fs->regs.reg);
529                     fs->regs = *old_rs;
530                     xfree (old_rs);
531                   }
532               }
533               break;
534
535             case DW_CFA_def_cfa:
536               insn_ptr = read_uleb128 (insn_ptr, insn_end, &fs->regs.cfa_reg);
537               insn_ptr = read_uleb128 (insn_ptr, insn_end, &utmp);
538
539               if (fs->armcc_cfa_offsets_sf)
540                 utmp *= fs->data_align;
541
542               fs->regs.cfa_offset = utmp;
543               fs->regs.cfa_how = CFA_REG_OFFSET;
544               break;
545
546             case DW_CFA_def_cfa_register:
547               insn_ptr = read_uleb128 (insn_ptr, insn_end, &fs->regs.cfa_reg);
548               fs->regs.cfa_reg = dwarf2_frame_adjust_regnum (gdbarch,
549                                                              fs->regs.cfa_reg,
550                                                              eh_frame_p);
551               fs->regs.cfa_how = CFA_REG_OFFSET;
552               break;
553
554             case DW_CFA_def_cfa_offset:
555               insn_ptr = read_uleb128 (insn_ptr, insn_end, &utmp);
556
557               if (fs->armcc_cfa_offsets_sf)
558                 utmp *= fs->data_align;
559
560               fs->regs.cfa_offset = utmp;
561               /* cfa_how deliberately not set.  */
562               break;
563
564             case DW_CFA_nop:
565               break;
566
567             case DW_CFA_def_cfa_expression:
568               insn_ptr = read_uleb128 (insn_ptr, insn_end,
569                                        &fs->regs.cfa_exp_len);
570               fs->regs.cfa_exp = insn_ptr;
571               fs->regs.cfa_how = CFA_EXP;
572               insn_ptr += fs->regs.cfa_exp_len;
573               break;
574
575             case DW_CFA_expression:
576               insn_ptr = read_uleb128 (insn_ptr, insn_end, &reg);
577               reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p);
578               dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
579               insn_ptr = read_uleb128 (insn_ptr, insn_end, &utmp);
580               fs->regs.reg[reg].loc.exp = insn_ptr;
581               fs->regs.reg[reg].exp_len = utmp;
582               fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_EXP;
583               insn_ptr += utmp;
584               break;
585
586             case DW_CFA_offset_extended_sf:
587               insn_ptr = read_uleb128 (insn_ptr, insn_end, &reg);
588               reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p);
589               insn_ptr = read_sleb128 (insn_ptr, insn_end, &offset);
590               offset *= fs->data_align;
591               dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
592               fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_OFFSET;
593               fs->regs.reg[reg].loc.offset = offset;
594               break;
595
596             case DW_CFA_val_offset:
597               insn_ptr = read_uleb128 (insn_ptr, insn_end, &reg);
598               dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
599               insn_ptr = read_uleb128 (insn_ptr, insn_end, &utmp);
600               offset = utmp * fs->data_align;
601               fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_VAL_OFFSET;
602               fs->regs.reg[reg].loc.offset = offset;
603               break;
604
605             case DW_CFA_val_offset_sf:
606               insn_ptr = read_uleb128 (insn_ptr, insn_end, &reg);
607               dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
608               insn_ptr = read_sleb128 (insn_ptr, insn_end, &offset);
609               offset *= fs->data_align;
610               fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_VAL_OFFSET;
611               fs->regs.reg[reg].loc.offset = offset;
612               break;
613
614             case DW_CFA_val_expression:
615               insn_ptr = read_uleb128 (insn_ptr, insn_end, &reg);
616               dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
617               insn_ptr = read_uleb128 (insn_ptr, insn_end, &utmp);
618               fs->regs.reg[reg].loc.exp = insn_ptr;
619               fs->regs.reg[reg].exp_len = utmp;
620               fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_VAL_EXP;
621               insn_ptr += utmp;
622               break;
623
624             case DW_CFA_def_cfa_sf:
625               insn_ptr = read_uleb128 (insn_ptr, insn_end, &fs->regs.cfa_reg);
626               fs->regs.cfa_reg = dwarf2_frame_adjust_regnum (gdbarch,
627                                                              fs->regs.cfa_reg,
628                                                              eh_frame_p);
629               insn_ptr = read_sleb128 (insn_ptr, insn_end, &offset);
630               fs->regs.cfa_offset = offset * fs->data_align;
631               fs->regs.cfa_how = CFA_REG_OFFSET;
632               break;
633
634             case DW_CFA_def_cfa_offset_sf:
635               insn_ptr = read_sleb128 (insn_ptr, insn_end, &offset);
636               fs->regs.cfa_offset = offset * fs->data_align;
637               /* cfa_how deliberately not set.  */
638               break;
639
640             case DW_CFA_GNU_window_save:
641               /* This is SPARC-specific code, and contains hard-coded
642                  constants for the register numbering scheme used by
643                  GCC.  Rather than having a architecture-specific
644                  operation that's only ever used by a single
645                  architecture, we provide the implementation here.
646                  Incidentally that's what GCC does too in its
647                  unwinder.  */
648               {
649                 int size = register_size (gdbarch, 0);
650
651                 dwarf2_frame_state_alloc_regs (&fs->regs, 32);
652                 for (reg = 8; reg < 16; reg++)
653                   {
654                     fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_REG;
655                     fs->regs.reg[reg].loc.reg = reg + 16;
656                   }
657                 for (reg = 16; reg < 32; reg++)
658                   {
659                     fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_OFFSET;
660                     fs->regs.reg[reg].loc.offset = (reg - 16) * size;
661                   }
662               }
663               break;
664
665             case DW_CFA_GNU_args_size:
666               /* Ignored.  */
667               insn_ptr = read_uleb128 (insn_ptr, insn_end, &utmp);
668               break;
669
670             case DW_CFA_GNU_negative_offset_extended:
671               insn_ptr = read_uleb128 (insn_ptr, insn_end, &reg);
672               reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p);
673               insn_ptr = read_uleb128 (insn_ptr, insn_end, &offset);
674               offset *= fs->data_align;
675               dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
676               fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_OFFSET;
677               fs->regs.reg[reg].loc.offset = -offset;
678               break;
679
680             default:
681               internal_error (__FILE__, __LINE__, _("Unknown CFI encountered."));
682             }
683         }
684     }
685
686   /* Don't allow remember/restore between CIE and FDE programs.  */
687   dwarf2_frame_state_free_regs (fs->regs.prev);
688   fs->regs.prev = NULL;
689 }
690 \f
691
692 /* Architecture-specific operations.  */
693
694 /* Per-architecture data key.  */
695 static struct gdbarch_data *dwarf2_frame_data;
696
697 struct dwarf2_frame_ops
698 {
699   /* Pre-initialize the register state REG for register REGNUM.  */
700   void (*init_reg) (struct gdbarch *, int, struct dwarf2_frame_state_reg *,
701                     struct frame_info *);
702
703   /* Check whether the THIS_FRAME is a signal trampoline.  */
704   int (*signal_frame_p) (struct gdbarch *, struct frame_info *);
705
706   /* Convert .eh_frame register number to DWARF register number, or
707      adjust .debug_frame register number.  */
708   int (*adjust_regnum) (struct gdbarch *, int, int);
709 };
710
711 /* Default architecture-specific register state initialization
712    function.  */
713
714 static void
715 dwarf2_frame_default_init_reg (struct gdbarch *gdbarch, int regnum,
716                                struct dwarf2_frame_state_reg *reg,
717                                struct frame_info *this_frame)
718 {
719   /* If we have a register that acts as a program counter, mark it as
720      a destination for the return address.  If we have a register that
721      serves as the stack pointer, arrange for it to be filled with the
722      call frame address (CFA).  The other registers are marked as
723      unspecified.
724
725      We copy the return address to the program counter, since many
726      parts in GDB assume that it is possible to get the return address
727      by unwinding the program counter register.  However, on ISA's
728      with a dedicated return address register, the CFI usually only
729      contains information to unwind that return address register.
730
731      The reason we're treating the stack pointer special here is
732      because in many cases GCC doesn't emit CFI for the stack pointer
733      and implicitly assumes that it is equal to the CFA.  This makes
734      some sense since the DWARF specification (version 3, draft 8,
735      p. 102) says that:
736
737      "Typically, the CFA is defined to be the value of the stack
738      pointer at the call site in the previous frame (which may be
739      different from its value on entry to the current frame)."
740
741      However, this isn't true for all platforms supported by GCC
742      (e.g. IBM S/390 and zSeries).  Those architectures should provide
743      their own architecture-specific initialization function.  */
744
745   if (regnum == gdbarch_pc_regnum (gdbarch))
746     reg->how = DWARF2_FRAME_REG_RA;
747   else if (regnum == gdbarch_sp_regnum (gdbarch))
748     reg->how = DWARF2_FRAME_REG_CFA;
749 }
750
751 /* Return a default for the architecture-specific operations.  */
752
753 static void *
754 dwarf2_frame_init (struct obstack *obstack)
755 {
756   struct dwarf2_frame_ops *ops;
757   
758   ops = OBSTACK_ZALLOC (obstack, struct dwarf2_frame_ops);
759   ops->init_reg = dwarf2_frame_default_init_reg;
760   return ops;
761 }
762
763 /* Set the architecture-specific register state initialization
764    function for GDBARCH to INIT_REG.  */
765
766 void
767 dwarf2_frame_set_init_reg (struct gdbarch *gdbarch,
768                            void (*init_reg) (struct gdbarch *, int,
769                                              struct dwarf2_frame_state_reg *,
770                                              struct frame_info *))
771 {
772   struct dwarf2_frame_ops *ops = gdbarch_data (gdbarch, dwarf2_frame_data);
773
774   ops->init_reg = init_reg;
775 }
776
777 /* Pre-initialize the register state REG for register REGNUM.  */
778
779 static void
780 dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
781                        struct dwarf2_frame_state_reg *reg,
782                        struct frame_info *this_frame)
783 {
784   struct dwarf2_frame_ops *ops = gdbarch_data (gdbarch, dwarf2_frame_data);
785
786   ops->init_reg (gdbarch, regnum, reg, this_frame);
787 }
788
789 /* Set the architecture-specific signal trampoline recognition
790    function for GDBARCH to SIGNAL_FRAME_P.  */
791
792 void
793 dwarf2_frame_set_signal_frame_p (struct gdbarch *gdbarch,
794                                  int (*signal_frame_p) (struct gdbarch *,
795                                                         struct frame_info *))
796 {
797   struct dwarf2_frame_ops *ops = gdbarch_data (gdbarch, dwarf2_frame_data);
798
799   ops->signal_frame_p = signal_frame_p;
800 }
801
802 /* Query the architecture-specific signal frame recognizer for
803    THIS_FRAME.  */
804
805 static int
806 dwarf2_frame_signal_frame_p (struct gdbarch *gdbarch,
807                              struct frame_info *this_frame)
808 {
809   struct dwarf2_frame_ops *ops = gdbarch_data (gdbarch, dwarf2_frame_data);
810
811   if (ops->signal_frame_p == NULL)
812     return 0;
813   return ops->signal_frame_p (gdbarch, this_frame);
814 }
815
816 /* Set the architecture-specific adjustment of .eh_frame and .debug_frame
817    register numbers.  */
818
819 void
820 dwarf2_frame_set_adjust_regnum (struct gdbarch *gdbarch,
821                                 int (*adjust_regnum) (struct gdbarch *,
822                                                       int, int))
823 {
824   struct dwarf2_frame_ops *ops = gdbarch_data (gdbarch, dwarf2_frame_data);
825
826   ops->adjust_regnum = adjust_regnum;
827 }
828
829 /* Translate a .eh_frame register to DWARF register, or adjust a .debug_frame
830    register.  */
831
832 static int
833 dwarf2_frame_adjust_regnum (struct gdbarch *gdbarch, int regnum, int eh_frame_p)
834 {
835   struct dwarf2_frame_ops *ops = gdbarch_data (gdbarch, dwarf2_frame_data);
836
837   if (ops->adjust_regnum == NULL)
838     return regnum;
839   return ops->adjust_regnum (gdbarch, regnum, eh_frame_p);
840 }
841
842 static void
843 dwarf2_frame_find_quirks (struct dwarf2_frame_state *fs,
844                           struct dwarf2_fde *fde)
845 {
846   struct symtab *s;
847
848   s = find_pc_symtab (fs->pc);
849   if (s == NULL)
850     return;
851
852   if (producer_is_realview (s->producer))
853     {
854       if (fde->cie->version == 1)
855         fs->armcc_cfa_offsets_sf = 1;
856
857       if (fde->cie->version == 1)
858         fs->armcc_cfa_offsets_reversed = 1;
859
860       /* The reversed offset problem is present in some compilers
861          using DWARF3, but it was eventually fixed.  Check the ARM
862          defined augmentations, which are in the format "armcc" followed
863          by a list of one-character options.  The "+" option means
864          this problem is fixed (no quirk needed).  If the armcc
865          augmentation is missing, the quirk is needed.  */
866       if (fde->cie->version == 3
867           && (strncmp (fde->cie->augmentation, "armcc", 5) != 0
868               || strchr (fde->cie->augmentation + 5, '+') == NULL))
869         fs->armcc_cfa_offsets_reversed = 1;
870
871       return;
872     }
873 }
874 \f
875
876 struct dwarf2_frame_cache
877 {
878   /* DWARF Call Frame Address.  */
879   CORE_ADDR cfa;
880
881   /* Set if the return address column was marked as undefined.  */
882   int undefined_retaddr;
883
884   /* Saved registers, indexed by GDB register number, not by DWARF
885      register number.  */
886   struct dwarf2_frame_state_reg *reg;
887
888   /* Return address register.  */
889   struct dwarf2_frame_state_reg retaddr_reg;
890
891   /* Target address size in bytes.  */
892   int addr_size;
893 };
894
895 static struct dwarf2_frame_cache *
896 dwarf2_frame_cache (struct frame_info *this_frame, void **this_cache)
897 {
898   struct cleanup *old_chain;
899   struct gdbarch *gdbarch = get_frame_arch (this_frame);
900   const int num_regs = gdbarch_num_regs (gdbarch)
901                        + gdbarch_num_pseudo_regs (gdbarch);
902   struct dwarf2_frame_cache *cache;
903   struct dwarf2_frame_state *fs;
904   struct dwarf2_fde *fde;
905
906   if (*this_cache)
907     return *this_cache;
908
909   /* Allocate a new cache.  */
910   cache = FRAME_OBSTACK_ZALLOC (struct dwarf2_frame_cache);
911   cache->reg = FRAME_OBSTACK_CALLOC (num_regs, struct dwarf2_frame_state_reg);
912
913   /* Allocate and initialize the frame state.  */
914   fs = XMALLOC (struct dwarf2_frame_state);
915   memset (fs, 0, sizeof (struct dwarf2_frame_state));
916   old_chain = make_cleanup (dwarf2_frame_state_free, fs);
917
918   /* Unwind the PC.
919
920      Note that if the next frame is never supposed to return (i.e. a call
921      to abort), the compiler might optimize away the instruction at
922      its return address.  As a result the return address will
923      point at some random instruction, and the CFI for that
924      instruction is probably worthless to us.  GCC's unwinder solves
925      this problem by substracting 1 from the return address to get an
926      address in the middle of a presumed call instruction (or the
927      instruction in the associated delay slot).  This should only be
928      done for "normal" frames and not for resume-type frames (signal
929      handlers, sentinel frames, dummy frames).  The function
930      get_frame_address_in_block does just this.  It's not clear how
931      reliable the method is though; there is the potential for the
932      register state pre-call being different to that on return.  */
933   fs->pc = get_frame_address_in_block (this_frame);
934
935   /* Find the correct FDE.  */
936   fde = dwarf2_frame_find_fde (&fs->pc);
937   gdb_assert (fde != NULL);
938
939   /* Extract any interesting information from the CIE.  */
940   fs->data_align = fde->cie->data_alignment_factor;
941   fs->code_align = fde->cie->code_alignment_factor;
942   fs->retaddr_column = fde->cie->return_address_register;
943   cache->addr_size = fde->cie->addr_size;
944
945   /* Check for "quirks" - known bugs in producers.  */
946   dwarf2_frame_find_quirks (fs, fde);
947
948   /* First decode all the insns in the CIE.  */
949   execute_cfa_program (fde, fde->cie->initial_instructions,
950                        fde->cie->end, this_frame, fs);
951
952   /* Save the initialized register set.  */
953   fs->initial = fs->regs;
954   fs->initial.reg = dwarf2_frame_state_copy_regs (&fs->regs);
955
956   /* Then decode the insns in the FDE up to our target PC.  */
957   execute_cfa_program (fde, fde->instructions, fde->end, this_frame, fs);
958
959   /* Calculate the CFA.  */
960   switch (fs->regs.cfa_how)
961     {
962     case CFA_REG_OFFSET:
963       cache->cfa = read_reg (this_frame, fs->regs.cfa_reg);
964       if (fs->armcc_cfa_offsets_reversed)
965         cache->cfa -= fs->regs.cfa_offset;
966       else
967         cache->cfa += fs->regs.cfa_offset;
968       break;
969
970     case CFA_EXP:
971       cache->cfa =
972         execute_stack_op (fs->regs.cfa_exp, fs->regs.cfa_exp_len,
973                           cache->addr_size, this_frame, 0, 0);
974       break;
975
976     default:
977       internal_error (__FILE__, __LINE__, _("Unknown CFA rule."));
978     }
979
980   /* Initialize the register state.  */
981   {
982     int regnum;
983
984     for (regnum = 0; regnum < num_regs; regnum++)
985       dwarf2_frame_init_reg (gdbarch, regnum, &cache->reg[regnum], this_frame);
986   }
987
988   /* Go through the DWARF2 CFI generated table and save its register
989      location information in the cache.  Note that we don't skip the
990      return address column; it's perfectly all right for it to
991      correspond to a real register.  If it doesn't correspond to a
992      real register, or if we shouldn't treat it as such,
993      gdbarch_dwarf2_reg_to_regnum should be defined to return a number outside
994      the range [0, gdbarch_num_regs).  */
995   {
996     int column;         /* CFI speak for "register number".  */
997
998     for (column = 0; column < fs->regs.num_regs; column++)
999       {
1000         /* Use the GDB register number as the destination index.  */
1001         int regnum = gdbarch_dwarf2_reg_to_regnum (gdbarch, column);
1002
1003         /* If there's no corresponding GDB register, ignore it.  */
1004         if (regnum < 0 || regnum >= num_regs)
1005           continue;
1006
1007         /* NOTE: cagney/2003-09-05: CFI should specify the disposition
1008            of all debug info registers.  If it doesn't, complain (but
1009            not too loudly).  It turns out that GCC assumes that an
1010            unspecified register implies "same value" when CFI (draft
1011            7) specifies nothing at all.  Such a register could equally
1012            be interpreted as "undefined".  Also note that this check
1013            isn't sufficient; it only checks that all registers in the
1014            range [0 .. max column] are specified, and won't detect
1015            problems when a debug info register falls outside of the
1016            table.  We need a way of iterating through all the valid
1017            DWARF2 register numbers.  */
1018         if (fs->regs.reg[column].how == DWARF2_FRAME_REG_UNSPECIFIED)
1019           {
1020             if (cache->reg[regnum].how == DWARF2_FRAME_REG_UNSPECIFIED)
1021               complaint (&symfile_complaints, _("\
1022 incomplete CFI data; unspecified registers (e.g., %s) at %s"),
1023                          gdbarch_register_name (gdbarch, regnum),
1024                          paddress (gdbarch, fs->pc));
1025           }
1026         else
1027           cache->reg[regnum] = fs->regs.reg[column];
1028       }
1029   }
1030
1031   /* Eliminate any DWARF2_FRAME_REG_RA rules, and save the information
1032      we need for evaluating DWARF2_FRAME_REG_RA_OFFSET rules.  */
1033   {
1034     int regnum;
1035
1036     for (regnum = 0; regnum < num_regs; regnum++)
1037       {
1038         if (cache->reg[regnum].how == DWARF2_FRAME_REG_RA
1039             || cache->reg[regnum].how == DWARF2_FRAME_REG_RA_OFFSET)
1040           {
1041             struct dwarf2_frame_state_reg *retaddr_reg =
1042               &fs->regs.reg[fs->retaddr_column];
1043
1044             /* It seems rather bizarre to specify an "empty" column as
1045                the return adress column.  However, this is exactly
1046                what GCC does on some targets.  It turns out that GCC
1047                assumes that the return address can be found in the
1048                register corresponding to the return address column.
1049                Incidentally, that's how we should treat a return
1050                address column specifying "same value" too.  */
1051             if (fs->retaddr_column < fs->regs.num_regs
1052                 && retaddr_reg->how != DWARF2_FRAME_REG_UNSPECIFIED
1053                 && retaddr_reg->how != DWARF2_FRAME_REG_SAME_VALUE)
1054               {
1055                 if (cache->reg[regnum].how == DWARF2_FRAME_REG_RA)
1056                   cache->reg[regnum] = *retaddr_reg;
1057                 else
1058                   cache->retaddr_reg = *retaddr_reg;
1059               }
1060             else
1061               {
1062                 if (cache->reg[regnum].how == DWARF2_FRAME_REG_RA)
1063                   {
1064                     cache->reg[regnum].loc.reg = fs->retaddr_column;
1065                     cache->reg[regnum].how = DWARF2_FRAME_REG_SAVED_REG;
1066                   }
1067                 else
1068                   {
1069                     cache->retaddr_reg.loc.reg = fs->retaddr_column;
1070                     cache->retaddr_reg.how = DWARF2_FRAME_REG_SAVED_REG;
1071                   }
1072               }
1073           }
1074       }
1075   }
1076
1077   if (fs->retaddr_column < fs->regs.num_regs
1078       && fs->regs.reg[fs->retaddr_column].how == DWARF2_FRAME_REG_UNDEFINED)
1079     cache->undefined_retaddr = 1;
1080
1081   do_cleanups (old_chain);
1082
1083   *this_cache = cache;
1084   return cache;
1085 }
1086
1087 static void
1088 dwarf2_frame_this_id (struct frame_info *this_frame, void **this_cache,
1089                       struct frame_id *this_id)
1090 {
1091   struct dwarf2_frame_cache *cache =
1092     dwarf2_frame_cache (this_frame, this_cache);
1093
1094   if (cache->undefined_retaddr)
1095     return;
1096
1097   (*this_id) = frame_id_build (cache->cfa, get_frame_func (this_frame));
1098 }
1099
1100 static struct value *
1101 dwarf2_frame_prev_register (struct frame_info *this_frame, void **this_cache,
1102                             int regnum)
1103 {
1104   struct gdbarch *gdbarch = get_frame_arch (this_frame);
1105   struct dwarf2_frame_cache *cache =
1106     dwarf2_frame_cache (this_frame, this_cache);
1107   CORE_ADDR addr;
1108   int realnum;
1109
1110   switch (cache->reg[regnum].how)
1111     {
1112     case DWARF2_FRAME_REG_UNDEFINED:
1113       /* If CFI explicitly specified that the value isn't defined,
1114          mark it as optimized away; the value isn't available.  */
1115       return frame_unwind_got_optimized (this_frame, regnum);
1116
1117     case DWARF2_FRAME_REG_SAVED_OFFSET:
1118       addr = cache->cfa + cache->reg[regnum].loc.offset;
1119       return frame_unwind_got_memory (this_frame, regnum, addr);
1120
1121     case DWARF2_FRAME_REG_SAVED_REG:
1122       realnum
1123         = gdbarch_dwarf2_reg_to_regnum (gdbarch, cache->reg[regnum].loc.reg);
1124       return frame_unwind_got_register (this_frame, regnum, realnum);
1125
1126     case DWARF2_FRAME_REG_SAVED_EXP:
1127       addr = execute_stack_op (cache->reg[regnum].loc.exp,
1128                                cache->reg[regnum].exp_len,
1129                                cache->addr_size, this_frame, cache->cfa, 1);
1130       return frame_unwind_got_memory (this_frame, regnum, addr);
1131
1132     case DWARF2_FRAME_REG_SAVED_VAL_OFFSET:
1133       addr = cache->cfa + cache->reg[regnum].loc.offset;
1134       return frame_unwind_got_constant (this_frame, regnum, addr);
1135
1136     case DWARF2_FRAME_REG_SAVED_VAL_EXP:
1137       addr = execute_stack_op (cache->reg[regnum].loc.exp,
1138                                cache->reg[regnum].exp_len,
1139                                cache->addr_size, this_frame, cache->cfa, 1);
1140       return frame_unwind_got_constant (this_frame, regnum, addr);
1141
1142     case DWARF2_FRAME_REG_UNSPECIFIED:
1143       /* GCC, in its infinite wisdom decided to not provide unwind
1144          information for registers that are "same value".  Since
1145          DWARF2 (3 draft 7) doesn't define such behavior, said
1146          registers are actually undefined (which is different to CFI
1147          "undefined").  Code above issues a complaint about this.
1148          Here just fudge the books, assume GCC, and that the value is
1149          more inner on the stack.  */
1150       return frame_unwind_got_register (this_frame, regnum, regnum);
1151
1152     case DWARF2_FRAME_REG_SAME_VALUE:
1153       return frame_unwind_got_register (this_frame, regnum, regnum);
1154
1155     case DWARF2_FRAME_REG_CFA:
1156       return frame_unwind_got_address (this_frame, regnum, cache->cfa);
1157
1158     case DWARF2_FRAME_REG_CFA_OFFSET:
1159       addr = cache->cfa + cache->reg[regnum].loc.offset;
1160       return frame_unwind_got_address (this_frame, regnum, addr);
1161
1162     case DWARF2_FRAME_REG_RA_OFFSET:
1163       addr = cache->reg[regnum].loc.offset;
1164       regnum = gdbarch_dwarf2_reg_to_regnum
1165         (gdbarch, cache->retaddr_reg.loc.reg);
1166       addr += get_frame_register_unsigned (this_frame, regnum);
1167       return frame_unwind_got_address (this_frame, regnum, addr);
1168
1169     case DWARF2_FRAME_REG_FN:
1170       return cache->reg[regnum].loc.fn (this_frame, this_cache, regnum);
1171
1172     default:
1173       internal_error (__FILE__, __LINE__, _("Unknown register rule."));
1174     }
1175 }
1176
1177 static int
1178 dwarf2_frame_sniffer (const struct frame_unwind *self,
1179                       struct frame_info *this_frame, void **this_cache)
1180 {
1181   /* Grab an address that is guarenteed to reside somewhere within the
1182      function.  get_frame_pc(), with a no-return next function, can
1183      end up returning something past the end of this function's body.
1184      If the frame we're sniffing for is a signal frame whose start
1185      address is placed on the stack by the OS, its FDE must
1186      extend one byte before its start address or we could potentially
1187      select the FDE of the previous function.  */
1188   CORE_ADDR block_addr = get_frame_address_in_block (this_frame);
1189   struct dwarf2_fde *fde = dwarf2_frame_find_fde (&block_addr);
1190
1191   if (!fde)
1192     return 0;
1193
1194   /* On some targets, signal trampolines may have unwind information.
1195      We need to recognize them so that we set the frame type
1196      correctly.  */
1197
1198   if (fde->cie->signal_frame
1199       || dwarf2_frame_signal_frame_p (get_frame_arch (this_frame),
1200                                       this_frame))
1201     return self->type == SIGTRAMP_FRAME;
1202
1203   return self->type != SIGTRAMP_FRAME;
1204 }
1205
1206 static const struct frame_unwind dwarf2_frame_unwind =
1207 {
1208   NORMAL_FRAME,
1209   dwarf2_frame_this_id,
1210   dwarf2_frame_prev_register,
1211   NULL,
1212   dwarf2_frame_sniffer
1213 };
1214
1215 static const struct frame_unwind dwarf2_signal_frame_unwind =
1216 {
1217   SIGTRAMP_FRAME,
1218   dwarf2_frame_this_id,
1219   dwarf2_frame_prev_register,
1220   NULL,
1221   dwarf2_frame_sniffer
1222 };
1223
1224 /* Append the DWARF-2 frame unwinders to GDBARCH's list.  */
1225
1226 void
1227 dwarf2_append_unwinders (struct gdbarch *gdbarch)
1228 {
1229   frame_unwind_append_unwinder (gdbarch, &dwarf2_frame_unwind);
1230   frame_unwind_append_unwinder (gdbarch, &dwarf2_signal_frame_unwind);
1231 }
1232 \f
1233
1234 /* There is no explicitly defined relationship between the CFA and the
1235    location of frame's local variables and arguments/parameters.
1236    Therefore, frame base methods on this page should probably only be
1237    used as a last resort, just to avoid printing total garbage as a
1238    response to the "info frame" command.  */
1239
1240 static CORE_ADDR
1241 dwarf2_frame_base_address (struct frame_info *this_frame, void **this_cache)
1242 {
1243   struct dwarf2_frame_cache *cache =
1244     dwarf2_frame_cache (this_frame, this_cache);
1245
1246   return cache->cfa;
1247 }
1248
1249 static const struct frame_base dwarf2_frame_base =
1250 {
1251   &dwarf2_frame_unwind,
1252   dwarf2_frame_base_address,
1253   dwarf2_frame_base_address,
1254   dwarf2_frame_base_address
1255 };
1256
1257 const struct frame_base *
1258 dwarf2_frame_base_sniffer (struct frame_info *this_frame)
1259 {
1260   CORE_ADDR block_addr = get_frame_address_in_block (this_frame);
1261
1262   if (dwarf2_frame_find_fde (&block_addr))
1263     return &dwarf2_frame_base;
1264
1265   return NULL;
1266 }
1267
1268 /* Compute the CFA for THIS_FRAME, but only if THIS_FRAME came from
1269    the DWARF unwinder.  This is used to implement
1270    DW_OP_call_frame_cfa.  */
1271
1272 CORE_ADDR
1273 dwarf2_frame_cfa (struct frame_info *this_frame)
1274 {
1275   while (get_frame_type (this_frame) == INLINE_FRAME)
1276     this_frame = get_prev_frame (this_frame);
1277   /* This restriction could be lifted if other unwinders are known to
1278      compute the frame base in a way compatible with the DWARF
1279      unwinder.  */
1280   if (! frame_unwinder_is (this_frame, &dwarf2_frame_unwind))
1281     error (_("can't compute CFA for this frame"));
1282   return get_frame_base (this_frame);
1283 }
1284 \f
1285 const struct objfile_data *dwarf2_frame_objfile_data;
1286
1287 static unsigned int
1288 read_1_byte (bfd *abfd, gdb_byte *buf)
1289 {
1290   return bfd_get_8 (abfd, buf);
1291 }
1292
1293 static unsigned int
1294 read_4_bytes (bfd *abfd, gdb_byte *buf)
1295 {
1296   return bfd_get_32 (abfd, buf);
1297 }
1298
1299 static ULONGEST
1300 read_8_bytes (bfd *abfd, gdb_byte *buf)
1301 {
1302   return bfd_get_64 (abfd, buf);
1303 }
1304
1305 static ULONGEST
1306 read_unsigned_leb128 (bfd *abfd, gdb_byte *buf, unsigned int *bytes_read_ptr)
1307 {
1308   ULONGEST result;
1309   unsigned int num_read;
1310   int shift;
1311   gdb_byte byte;
1312
1313   result = 0;
1314   shift = 0;
1315   num_read = 0;
1316
1317   do
1318     {
1319       byte = bfd_get_8 (abfd, (bfd_byte *) buf);
1320       buf++;
1321       num_read++;
1322       result |= ((byte & 0x7f) << shift);
1323       shift += 7;
1324     }
1325   while (byte & 0x80);
1326
1327   *bytes_read_ptr = num_read;
1328
1329   return result;
1330 }
1331
1332 static LONGEST
1333 read_signed_leb128 (bfd *abfd, gdb_byte *buf, unsigned int *bytes_read_ptr)
1334 {
1335   LONGEST result;
1336   int shift;
1337   unsigned int num_read;
1338   gdb_byte byte;
1339
1340   result = 0;
1341   shift = 0;
1342   num_read = 0;
1343
1344   do
1345     {
1346       byte = bfd_get_8 (abfd, (bfd_byte *) buf);
1347       buf++;
1348       num_read++;
1349       result |= ((byte & 0x7f) << shift);
1350       shift += 7;
1351     }
1352   while (byte & 0x80);
1353
1354   if (shift < 8 * sizeof (result) && (byte & 0x40))
1355     result |= -(((LONGEST)1) << shift);
1356
1357   *bytes_read_ptr = num_read;
1358
1359   return result;
1360 }
1361
1362 static ULONGEST
1363 read_initial_length (bfd *abfd, gdb_byte *buf, unsigned int *bytes_read_ptr)
1364 {
1365   LONGEST result;
1366
1367   result = bfd_get_32 (abfd, buf);
1368   if (result == 0xffffffff)
1369     {
1370       result = bfd_get_64 (abfd, buf + 4);
1371       *bytes_read_ptr = 12;
1372     }
1373   else
1374     *bytes_read_ptr = 4;
1375
1376   return result;
1377 }
1378 \f
1379
1380 /* Pointer encoding helper functions.  */
1381
1382 /* GCC supports exception handling based on DWARF2 CFI.  However, for
1383    technical reasons, it encodes addresses in its FDE's in a different
1384    way.  Several "pointer encodings" are supported.  The encoding
1385    that's used for a particular FDE is determined by the 'R'
1386    augmentation in the associated CIE.  The argument of this
1387    augmentation is a single byte.  
1388
1389    The address can be encoded as 2 bytes, 4 bytes, 8 bytes, or as a
1390    LEB128.  This is encoded in bits 0, 1 and 2.  Bit 3 encodes whether
1391    the address is signed or unsigned.  Bits 4, 5 and 6 encode how the
1392    address should be interpreted (absolute, relative to the current
1393    position in the FDE, ...).  Bit 7, indicates that the address
1394    should be dereferenced.  */
1395
1396 static gdb_byte
1397 encoding_for_size (unsigned int size)
1398 {
1399   switch (size)
1400     {
1401     case 2:
1402       return DW_EH_PE_udata2;
1403     case 4:
1404       return DW_EH_PE_udata4;
1405     case 8:
1406       return DW_EH_PE_udata8;
1407     default:
1408       internal_error (__FILE__, __LINE__, _("Unsupported address size"));
1409     }
1410 }
1411
1412 static CORE_ADDR
1413 read_encoded_value (struct comp_unit *unit, gdb_byte encoding,
1414                     int ptr_len, gdb_byte *buf, unsigned int *bytes_read_ptr,
1415                     CORE_ADDR func_base)
1416 {
1417   ptrdiff_t offset;
1418   CORE_ADDR base;
1419
1420   /* GCC currently doesn't generate DW_EH_PE_indirect encodings for
1421      FDE's.  */
1422   if (encoding & DW_EH_PE_indirect)
1423     internal_error (__FILE__, __LINE__, 
1424                     _("Unsupported encoding: DW_EH_PE_indirect"));
1425
1426   *bytes_read_ptr = 0;
1427
1428   switch (encoding & 0x70)
1429     {
1430     case DW_EH_PE_absptr:
1431       base = 0;
1432       break;
1433     case DW_EH_PE_pcrel:
1434       base = bfd_get_section_vma (unit->abfd, unit->dwarf_frame_section);
1435       base += (buf - unit->dwarf_frame_buffer);
1436       break;
1437     case DW_EH_PE_datarel:
1438       base = unit->dbase;
1439       break;
1440     case DW_EH_PE_textrel:
1441       base = unit->tbase;
1442       break;
1443     case DW_EH_PE_funcrel:
1444       base = func_base;
1445       break;
1446     case DW_EH_PE_aligned:
1447       base = 0;
1448       offset = buf - unit->dwarf_frame_buffer;
1449       if ((offset % ptr_len) != 0)
1450         {
1451           *bytes_read_ptr = ptr_len - (offset % ptr_len);
1452           buf += *bytes_read_ptr;
1453         }
1454       break;
1455     default:
1456       internal_error (__FILE__, __LINE__, _("Invalid or unsupported encoding"));
1457     }
1458
1459   if ((encoding & 0x07) == 0x00)
1460     {
1461       encoding |= encoding_for_size (ptr_len);
1462       if (bfd_get_sign_extend_vma (unit->abfd))
1463         encoding |= DW_EH_PE_signed;
1464     }
1465
1466   switch (encoding & 0x0f)
1467     {
1468     case DW_EH_PE_uleb128:
1469       {
1470         ULONGEST value;
1471         gdb_byte *end_buf = buf + (sizeof (value) + 1) * 8 / 7;
1472
1473         *bytes_read_ptr += read_uleb128 (buf, end_buf, &value) - buf;
1474         return base + value;
1475       }
1476     case DW_EH_PE_udata2:
1477       *bytes_read_ptr += 2;
1478       return (base + bfd_get_16 (unit->abfd, (bfd_byte *) buf));
1479     case DW_EH_PE_udata4:
1480       *bytes_read_ptr += 4;
1481       return (base + bfd_get_32 (unit->abfd, (bfd_byte *) buf));
1482     case DW_EH_PE_udata8:
1483       *bytes_read_ptr += 8;
1484       return (base + bfd_get_64 (unit->abfd, (bfd_byte *) buf));
1485     case DW_EH_PE_sleb128:
1486       {
1487         LONGEST value;
1488         gdb_byte *end_buf = buf + (sizeof (value) + 1) * 8 / 7;
1489
1490         *bytes_read_ptr += read_sleb128 (buf, end_buf, &value) - buf;
1491         return base + value;
1492       }
1493     case DW_EH_PE_sdata2:
1494       *bytes_read_ptr += 2;
1495       return (base + bfd_get_signed_16 (unit->abfd, (bfd_byte *) buf));
1496     case DW_EH_PE_sdata4:
1497       *bytes_read_ptr += 4;
1498       return (base + bfd_get_signed_32 (unit->abfd, (bfd_byte *) buf));
1499     case DW_EH_PE_sdata8:
1500       *bytes_read_ptr += 8;
1501       return (base + bfd_get_signed_64 (unit->abfd, (bfd_byte *) buf));
1502     default:
1503       internal_error (__FILE__, __LINE__, _("Invalid or unsupported encoding"));
1504     }
1505 }
1506 \f
1507
1508 static int
1509 bsearch_cie_cmp (const void *key, const void *element)
1510 {
1511   ULONGEST cie_pointer = *(ULONGEST *) key;
1512   struct dwarf2_cie *cie = *(struct dwarf2_cie **) element;
1513
1514   if (cie_pointer == cie->cie_pointer)
1515     return 0;
1516
1517   return (cie_pointer < cie->cie_pointer) ? -1 : 1;
1518 }
1519
1520 /* Find CIE with the given CIE_POINTER in CIE_TABLE.  */
1521 static struct dwarf2_cie *
1522 find_cie (struct dwarf2_cie_table *cie_table, ULONGEST cie_pointer)
1523 {
1524   struct dwarf2_cie **p_cie;
1525
1526   /* The C standard (ISO/IEC 9899:TC2) requires the BASE argument to
1527      bsearch be non-NULL.  */
1528   if (cie_table->entries == NULL)
1529     {
1530       gdb_assert (cie_table->num_entries == 0);
1531       return NULL;
1532     }
1533
1534   p_cie = bsearch (&cie_pointer, cie_table->entries, cie_table->num_entries,
1535                    sizeof (cie_table->entries[0]), bsearch_cie_cmp);
1536   if (p_cie != NULL)
1537     return *p_cie;
1538   return NULL;
1539 }
1540
1541 /* Add a pointer to new CIE to the CIE_TABLE, allocating space for it.  */
1542 static void
1543 add_cie (struct dwarf2_cie_table *cie_table, struct dwarf2_cie *cie)
1544 {
1545   const int n = cie_table->num_entries;
1546
1547   gdb_assert (n < 1
1548               || cie_table->entries[n - 1]->cie_pointer < cie->cie_pointer);
1549
1550   cie_table->entries =
1551       xrealloc (cie_table->entries, (n + 1) * sizeof (cie_table->entries[0]));
1552   cie_table->entries[n] = cie;
1553   cie_table->num_entries = n + 1;
1554 }
1555
1556 static int
1557 bsearch_fde_cmp (const void *key, const void *element)
1558 {
1559   CORE_ADDR seek_pc = *(CORE_ADDR *) key;
1560   struct dwarf2_fde *fde = *(struct dwarf2_fde **) element;
1561
1562   if (seek_pc < fde->initial_location)
1563     return -1;
1564   if (seek_pc < fde->initial_location + fde->address_range)
1565     return 0;
1566   return 1;
1567 }
1568
1569 /* Find the FDE for *PC.  Return a pointer to the FDE, and store the
1570    inital location associated with it into *PC.  */
1571
1572 static struct dwarf2_fde *
1573 dwarf2_frame_find_fde (CORE_ADDR *pc)
1574 {
1575   struct objfile *objfile;
1576
1577   ALL_OBJFILES (objfile)
1578     {
1579       struct dwarf2_fde_table *fde_table;
1580       struct dwarf2_fde **p_fde;
1581       CORE_ADDR offset;
1582       CORE_ADDR seek_pc;
1583
1584       fde_table = objfile_data (objfile, dwarf2_frame_objfile_data);
1585       if (fde_table == NULL)
1586         {
1587           dwarf2_build_frame_info (objfile);
1588           fde_table = objfile_data (objfile, dwarf2_frame_objfile_data);
1589         }
1590       gdb_assert (fde_table != NULL);
1591
1592       if (fde_table->num_entries == 0)
1593         continue;
1594
1595       gdb_assert (objfile->section_offsets);
1596       offset = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
1597
1598       gdb_assert (fde_table->num_entries > 0);
1599       if (*pc < offset + fde_table->entries[0]->initial_location)
1600         continue;
1601
1602       seek_pc = *pc - offset;
1603       p_fde = bsearch (&seek_pc, fde_table->entries, fde_table->num_entries,
1604                        sizeof (fde_table->entries[0]), bsearch_fde_cmp);
1605       if (p_fde != NULL)
1606         {
1607           *pc = (*p_fde)->initial_location + offset;
1608           return *p_fde;
1609         }
1610     }
1611   return NULL;
1612 }
1613
1614 /* Add a pointer to new FDE to the FDE_TABLE, allocating space for it.  */
1615 static void
1616 add_fde (struct dwarf2_fde_table *fde_table, struct dwarf2_fde *fde)
1617 {
1618   if (fde->address_range == 0)
1619     /* Discard useless FDEs.  */
1620     return;
1621
1622   fde_table->num_entries += 1;
1623   fde_table->entries =
1624       xrealloc (fde_table->entries,
1625                 fde_table->num_entries * sizeof (fde_table->entries[0]));
1626   fde_table->entries[fde_table->num_entries - 1] = fde;
1627 }
1628
1629 #ifdef CC_HAS_LONG_LONG
1630 #define DW64_CIE_ID 0xffffffffffffffffULL
1631 #else
1632 #define DW64_CIE_ID ~0
1633 #endif
1634
1635 static gdb_byte *decode_frame_entry (struct comp_unit *unit, gdb_byte *start,
1636                                      int eh_frame_p,
1637                                      struct dwarf2_cie_table *cie_table,
1638                                      struct dwarf2_fde_table *fde_table);
1639
1640 /* Decode the next CIE or FDE.  Return NULL if invalid input, otherwise
1641    the next byte to be processed.  */
1642 static gdb_byte *
1643 decode_frame_entry_1 (struct comp_unit *unit, gdb_byte *start, int eh_frame_p,
1644                       struct dwarf2_cie_table *cie_table,
1645                       struct dwarf2_fde_table *fde_table)
1646 {
1647   struct gdbarch *gdbarch = get_objfile_arch (unit->objfile);
1648   gdb_byte *buf, *end;
1649   LONGEST length;
1650   unsigned int bytes_read;
1651   int dwarf64_p;
1652   ULONGEST cie_id;
1653   ULONGEST cie_pointer;
1654
1655   buf = start;
1656   length = read_initial_length (unit->abfd, buf, &bytes_read);
1657   buf += bytes_read;
1658   end = buf + length;
1659
1660   /* Are we still within the section? */
1661   if (end > unit->dwarf_frame_buffer + unit->dwarf_frame_size)
1662     return NULL;
1663
1664   if (length == 0)
1665     return end;
1666
1667   /* Distinguish between 32 and 64-bit encoded frame info.  */
1668   dwarf64_p = (bytes_read == 12);
1669
1670   /* In a .eh_frame section, zero is used to distinguish CIEs from FDEs.  */
1671   if (eh_frame_p)
1672     cie_id = 0;
1673   else if (dwarf64_p)
1674     cie_id = DW64_CIE_ID;
1675   else
1676     cie_id = DW_CIE_ID;
1677
1678   if (dwarf64_p)
1679     {
1680       cie_pointer = read_8_bytes (unit->abfd, buf);
1681       buf += 8;
1682     }
1683   else
1684     {
1685       cie_pointer = read_4_bytes (unit->abfd, buf);
1686       buf += 4;
1687     }
1688
1689   if (cie_pointer == cie_id)
1690     {
1691       /* This is a CIE.  */
1692       struct dwarf2_cie *cie;
1693       char *augmentation;
1694       unsigned int cie_version;
1695
1696       /* Record the offset into the .debug_frame section of this CIE.  */
1697       cie_pointer = start - unit->dwarf_frame_buffer;
1698
1699       /* Check whether we've already read it.  */
1700       if (find_cie (cie_table, cie_pointer))
1701         return end;
1702
1703       cie = (struct dwarf2_cie *)
1704         obstack_alloc (&unit->objfile->objfile_obstack,
1705                        sizeof (struct dwarf2_cie));
1706       cie->initial_instructions = NULL;
1707       cie->cie_pointer = cie_pointer;
1708
1709       /* The encoding for FDE's in a normal .debug_frame section
1710          depends on the target address size.  */
1711       cie->encoding = DW_EH_PE_absptr;
1712
1713       /* The target address size.  For .eh_frame FDEs this is considered
1714          equal to the size of a target pointer.  For .dwarf_frame FDEs, 
1715          this is supposed to be the target address size from the associated
1716          CU header.  FIXME: We do not have a good way to determine the 
1717          latter.  Always use the target pointer size for now.  */
1718       cie->addr_size = gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT;
1719
1720       /* We'll determine the final value later, but we need to
1721          initialize it conservatively.  */
1722       cie->signal_frame = 0;
1723
1724       /* Check version number.  */
1725       cie_version = read_1_byte (unit->abfd, buf);
1726       if (cie_version != 1 && cie_version != 3 && cie_version != 4)
1727         return NULL;
1728       cie->version = cie_version;
1729       buf += 1;
1730
1731       /* Interpret the interesting bits of the augmentation.  */
1732       cie->augmentation = augmentation = (char *) buf;
1733       buf += (strlen (augmentation) + 1);
1734
1735       /* Ignore armcc augmentations.  We only use them for quirks,
1736          and that doesn't happen until later.  */
1737       if (strncmp (augmentation, "armcc", 5) == 0)
1738         augmentation += strlen (augmentation);
1739
1740       /* The GCC 2.x "eh" augmentation has a pointer immediately
1741          following the augmentation string, so it must be handled
1742          first.  */
1743       if (augmentation[0] == 'e' && augmentation[1] == 'h')
1744         {
1745           /* Skip.  */
1746           buf += gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT;
1747           augmentation += 2;
1748         }
1749
1750       if (cie->version >= 4)
1751         {
1752           /* FIXME: check that this is the same as from the CU header.  */
1753           cie->addr_size = read_1_byte (unit->abfd, buf);
1754           ++buf;
1755           cie->segment_size = read_1_byte (unit->abfd, buf);
1756           ++buf;
1757         }
1758       else
1759         {
1760           cie->addr_size = gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT;
1761           cie->segment_size = 0;
1762         }
1763
1764       cie->code_alignment_factor =
1765         read_unsigned_leb128 (unit->abfd, buf, &bytes_read);
1766       buf += bytes_read;
1767
1768       cie->data_alignment_factor =
1769         read_signed_leb128 (unit->abfd, buf, &bytes_read);
1770       buf += bytes_read;
1771
1772       if (cie_version == 1)
1773         {
1774           cie->return_address_register = read_1_byte (unit->abfd, buf);
1775           bytes_read = 1;
1776         }
1777       else
1778         cie->return_address_register = read_unsigned_leb128 (unit->abfd, buf,
1779                                                              &bytes_read);
1780       cie->return_address_register
1781         = dwarf2_frame_adjust_regnum (gdbarch,
1782                                       cie->return_address_register,
1783                                       eh_frame_p);
1784
1785       buf += bytes_read;
1786
1787       cie->saw_z_augmentation = (*augmentation == 'z');
1788       if (cie->saw_z_augmentation)
1789         {
1790           ULONGEST length;
1791
1792           length = read_unsigned_leb128 (unit->abfd, buf, &bytes_read);
1793           buf += bytes_read;
1794           if (buf > end)
1795             return NULL;
1796           cie->initial_instructions = buf + length;
1797           augmentation++;
1798         }
1799
1800       while (*augmentation)
1801         {
1802           /* "L" indicates a byte showing how the LSDA pointer is encoded.  */
1803           if (*augmentation == 'L')
1804             {
1805               /* Skip.  */
1806               buf++;
1807               augmentation++;
1808             }
1809
1810           /* "R" indicates a byte indicating how FDE addresses are encoded.  */
1811           else if (*augmentation == 'R')
1812             {
1813               cie->encoding = *buf++;
1814               augmentation++;
1815             }
1816
1817           /* "P" indicates a personality routine in the CIE augmentation.  */
1818           else if (*augmentation == 'P')
1819             {
1820               /* Skip.  Avoid indirection since we throw away the result.  */
1821               gdb_byte encoding = (*buf++) & ~DW_EH_PE_indirect;
1822               read_encoded_value (unit, encoding, cie->addr_size,
1823                                   buf, &bytes_read, 0);
1824               buf += bytes_read;
1825               augmentation++;
1826             }
1827
1828           /* "S" indicates a signal frame, such that the return
1829              address must not be decremented to locate the call frame
1830              info for the previous frame; it might even be the first
1831              instruction of a function, so decrementing it would take
1832              us to a different function.  */
1833           else if (*augmentation == 'S')
1834             {
1835               cie->signal_frame = 1;
1836               augmentation++;
1837             }
1838
1839           /* Otherwise we have an unknown augmentation.  Assume that either
1840              there is no augmentation data, or we saw a 'z' prefix.  */
1841           else
1842             {
1843               if (cie->initial_instructions)
1844                 buf = cie->initial_instructions;
1845               break;
1846             }
1847         }
1848
1849       cie->initial_instructions = buf;
1850       cie->end = end;
1851       cie->unit = unit;
1852
1853       add_cie (cie_table, cie);
1854     }
1855   else
1856     {
1857       /* This is a FDE.  */
1858       struct dwarf2_fde *fde;
1859
1860       /* In an .eh_frame section, the CIE pointer is the delta between the
1861          address within the FDE where the CIE pointer is stored and the
1862          address of the CIE.  Convert it to an offset into the .eh_frame
1863          section.  */
1864       if (eh_frame_p)
1865         {
1866           cie_pointer = buf - unit->dwarf_frame_buffer - cie_pointer;
1867           cie_pointer -= (dwarf64_p ? 8 : 4);
1868         }
1869
1870       /* In either case, validate the result is still within the section.  */
1871       if (cie_pointer >= unit->dwarf_frame_size)
1872         return NULL;
1873
1874       fde = (struct dwarf2_fde *)
1875         obstack_alloc (&unit->objfile->objfile_obstack,
1876                        sizeof (struct dwarf2_fde));
1877       fde->cie = find_cie (cie_table, cie_pointer);
1878       if (fde->cie == NULL)
1879         {
1880           decode_frame_entry (unit, unit->dwarf_frame_buffer + cie_pointer,
1881                               eh_frame_p, cie_table, fde_table);
1882           fde->cie = find_cie (cie_table, cie_pointer);
1883         }
1884
1885       gdb_assert (fde->cie != NULL);
1886
1887       fde->initial_location =
1888         read_encoded_value (unit, fde->cie->encoding, fde->cie->addr_size,
1889                             buf, &bytes_read, 0);
1890       buf += bytes_read;
1891
1892       fde->address_range =
1893         read_encoded_value (unit, fde->cie->encoding & 0x0f,
1894                             fde->cie->addr_size, buf, &bytes_read, 0);
1895       buf += bytes_read;
1896
1897       /* A 'z' augmentation in the CIE implies the presence of an
1898          augmentation field in the FDE as well.  The only thing known
1899          to be in here at present is the LSDA entry for EH.  So we
1900          can skip the whole thing.  */
1901       if (fde->cie->saw_z_augmentation)
1902         {
1903           ULONGEST length;
1904
1905           length = read_unsigned_leb128 (unit->abfd, buf, &bytes_read);
1906           buf += bytes_read + length;
1907           if (buf > end)
1908             return NULL;
1909         }
1910
1911       fde->instructions = buf;
1912       fde->end = end;
1913
1914       fde->eh_frame_p = eh_frame_p;
1915
1916       add_fde (fde_table, fde);
1917     }
1918
1919   return end;
1920 }
1921
1922 /* Read a CIE or FDE in BUF and decode it.  */
1923 static gdb_byte *
1924 decode_frame_entry (struct comp_unit *unit, gdb_byte *start, int eh_frame_p,
1925                     struct dwarf2_cie_table *cie_table,
1926                     struct dwarf2_fde_table *fde_table)
1927 {
1928   enum { NONE, ALIGN4, ALIGN8, FAIL } workaround = NONE;
1929   gdb_byte *ret;
1930   ptrdiff_t start_offset;
1931
1932   while (1)
1933     {
1934       ret = decode_frame_entry_1 (unit, start, eh_frame_p,
1935                                   cie_table, fde_table);
1936       if (ret != NULL)
1937         break;
1938
1939       /* We have corrupt input data of some form.  */
1940
1941       /* ??? Try, weakly, to work around compiler/assembler/linker bugs
1942          and mismatches wrt padding and alignment of debug sections.  */
1943       /* Note that there is no requirement in the standard for any
1944          alignment at all in the frame unwind sections.  Testing for
1945          alignment before trying to interpret data would be incorrect.
1946
1947          However, GCC traditionally arranged for frame sections to be
1948          sized such that the FDE length and CIE fields happen to be
1949          aligned (in theory, for performance).  This, unfortunately,
1950          was done with .align directives, which had the side effect of
1951          forcing the section to be aligned by the linker.
1952
1953          This becomes a problem when you have some other producer that
1954          creates frame sections that are not as strictly aligned.  That
1955          produces a hole in the frame info that gets filled by the 
1956          linker with zeros.
1957
1958          The GCC behaviour is arguably a bug, but it's effectively now
1959          part of the ABI, so we're now stuck with it, at least at the
1960          object file level.  A smart linker may decide, in the process
1961          of compressing duplicate CIE information, that it can rewrite
1962          the entire output section without this extra padding.  */
1963
1964       start_offset = start - unit->dwarf_frame_buffer;
1965       if (workaround < ALIGN4 && (start_offset & 3) != 0)
1966         {
1967           start += 4 - (start_offset & 3);
1968           workaround = ALIGN4;
1969           continue;
1970         }
1971       if (workaround < ALIGN8 && (start_offset & 7) != 0)
1972         {
1973           start += 8 - (start_offset & 7);
1974           workaround = ALIGN8;
1975           continue;
1976         }
1977
1978       /* Nothing left to try.  Arrange to return as if we've consumed
1979          the entire input section.  Hopefully we'll get valid info from
1980          the other of .debug_frame/.eh_frame.  */
1981       workaround = FAIL;
1982       ret = unit->dwarf_frame_buffer + unit->dwarf_frame_size;
1983       break;
1984     }
1985
1986   switch (workaround)
1987     {
1988     case NONE:
1989       break;
1990
1991     case ALIGN4:
1992       complaint (&symfile_complaints,
1993                  _("Corrupt data in %s:%s; align 4 workaround apparently succeeded"),
1994                  unit->dwarf_frame_section->owner->filename,
1995                  unit->dwarf_frame_section->name);
1996       break;
1997
1998     case ALIGN8:
1999       complaint (&symfile_complaints,
2000                  _("Corrupt data in %s:%s; align 8 workaround apparently succeeded"),
2001                  unit->dwarf_frame_section->owner->filename,
2002                  unit->dwarf_frame_section->name);
2003       break;
2004
2005     default:
2006       complaint (&symfile_complaints,
2007                  _("Corrupt data in %s:%s"),
2008                  unit->dwarf_frame_section->owner->filename,
2009                  unit->dwarf_frame_section->name);
2010       break;
2011     }
2012
2013   return ret;
2014 }
2015 \f
2016
2017 /* Imported from dwarf2read.c.  */
2018 extern void dwarf2_get_section_info (struct objfile *, const char *, asection **,
2019                                      gdb_byte **, bfd_size_type *);
2020
2021 static int
2022 qsort_fde_cmp (const void *a, const void *b)
2023 {
2024   struct dwarf2_fde *aa = *(struct dwarf2_fde **)a;
2025   struct dwarf2_fde *bb = *(struct dwarf2_fde **)b;
2026
2027   if (aa->initial_location == bb->initial_location)
2028     {
2029       if (aa->address_range != bb->address_range
2030           && aa->eh_frame_p == 0 && bb->eh_frame_p == 0)
2031         /* Linker bug, e.g. gold/10400.
2032            Work around it by keeping stable sort order.  */
2033         return (a < b) ? -1 : 1;
2034       else
2035         /* Put eh_frame entries after debug_frame ones.  */
2036         return aa->eh_frame_p - bb->eh_frame_p;
2037     }
2038
2039   return (aa->initial_location < bb->initial_location) ? -1 : 1;
2040 }
2041
2042 void
2043 dwarf2_build_frame_info (struct objfile *objfile)
2044 {
2045   struct comp_unit *unit;
2046   gdb_byte *frame_ptr;
2047   struct dwarf2_cie_table cie_table;
2048   struct dwarf2_fde_table fde_table;
2049   struct dwarf2_fde_table *fde_table2;
2050
2051   cie_table.num_entries = 0;
2052   cie_table.entries = NULL;
2053
2054   fde_table.num_entries = 0;
2055   fde_table.entries = NULL;
2056
2057   /* Build a minimal decoding of the DWARF2 compilation unit.  */
2058   unit = (struct comp_unit *) obstack_alloc (&objfile->objfile_obstack,
2059                                              sizeof (struct comp_unit));
2060   unit->abfd = objfile->obfd;
2061   unit->objfile = objfile;
2062   unit->dbase = 0;
2063   unit->tbase = 0;
2064
2065   dwarf2_get_section_info (objfile, ".eh_frame",
2066                            &unit->dwarf_frame_section,
2067                            &unit->dwarf_frame_buffer,
2068                            &unit->dwarf_frame_size);
2069   if (unit->dwarf_frame_size)
2070     {
2071       asection *got, *txt;
2072
2073       /* FIXME: kettenis/20030602: This is the DW_EH_PE_datarel base
2074          that is used for the i386/amd64 target, which currently is
2075          the only target in GCC that supports/uses the
2076          DW_EH_PE_datarel encoding.  */
2077       got = bfd_get_section_by_name (unit->abfd, ".got");
2078       if (got)
2079         unit->dbase = got->vma;
2080
2081       /* GCC emits the DW_EH_PE_textrel encoding type on sh and ia64
2082          so far.  */
2083       txt = bfd_get_section_by_name (unit->abfd, ".text");
2084       if (txt)
2085         unit->tbase = txt->vma;
2086
2087       frame_ptr = unit->dwarf_frame_buffer;
2088       while (frame_ptr < unit->dwarf_frame_buffer + unit->dwarf_frame_size)
2089         frame_ptr = decode_frame_entry (unit, frame_ptr, 1,
2090                                         &cie_table, &fde_table);
2091
2092       if (cie_table.num_entries != 0)
2093         {
2094           /* Reinit cie_table: debug_frame has different CIEs.  */
2095           xfree (cie_table.entries);
2096           cie_table.num_entries = 0;
2097           cie_table.entries = NULL;
2098         }
2099     }
2100
2101   dwarf2_get_section_info (objfile, ".debug_frame",
2102                            &unit->dwarf_frame_section,
2103                            &unit->dwarf_frame_buffer,
2104                            &unit->dwarf_frame_size);
2105   if (unit->dwarf_frame_size)
2106     {
2107       frame_ptr = unit->dwarf_frame_buffer;
2108       while (frame_ptr < unit->dwarf_frame_buffer + unit->dwarf_frame_size)
2109         frame_ptr = decode_frame_entry (unit, frame_ptr, 0,
2110                                         &cie_table, &fde_table);
2111     }
2112
2113   /* Discard the cie_table, it is no longer needed.  */
2114   if (cie_table.num_entries != 0)
2115     {
2116       xfree (cie_table.entries);
2117       cie_table.entries = NULL;   /* Paranoia.  */
2118       cie_table.num_entries = 0;  /* Paranoia.  */
2119     }
2120
2121   /* Copy fde_table to obstack: it is needed at runtime.  */
2122   fde_table2 = (struct dwarf2_fde_table *)
2123     obstack_alloc (&objfile->objfile_obstack, sizeof (*fde_table2));
2124
2125   if (fde_table.num_entries == 0)
2126     {
2127       fde_table2->entries = NULL;
2128       fde_table2->num_entries = 0;
2129     }
2130   else
2131     {
2132       struct dwarf2_fde *fde_prev = NULL;
2133       struct dwarf2_fde *first_non_zero_fde = NULL;
2134       int i;
2135
2136       /* Prepare FDE table for lookups.  */
2137       qsort (fde_table.entries, fde_table.num_entries,
2138              sizeof (fde_table.entries[0]), qsort_fde_cmp);
2139
2140       /* Check for leftovers from --gc-sections.  The GNU linker sets
2141          the relevant symbols to zero, but doesn't zero the FDE *end*
2142          ranges because there's no relocation there.  It's (offset,
2143          length), not (start, end).  On targets where address zero is
2144          just another valid address this can be a problem, since the
2145          FDEs appear to be non-empty in the output --- we could pick
2146          out the wrong FDE.  To work around this, when overlaps are
2147          detected, we prefer FDEs that do not start at zero.
2148
2149          Start by finding the first FDE with non-zero start.  Below
2150          we'll discard all FDEs that start at zero and overlap this
2151          one.  */
2152       for (i = 0; i < fde_table.num_entries; i++)
2153         {
2154           struct dwarf2_fde *fde = fde_table.entries[i];
2155
2156           if (fde->initial_location != 0)
2157             {
2158               first_non_zero_fde = fde;
2159               break;
2160             }
2161         }
2162
2163       /* Since we'll be doing bsearch, squeeze out identical (except
2164          for eh_frame_p) fde entries so bsearch result is predictable.
2165          Also discard leftovers from --gc-sections.  */
2166       fde_table2->num_entries = 0;
2167       for (i = 0; i < fde_table.num_entries; i++)
2168         {
2169           struct dwarf2_fde *fde = fde_table.entries[i];
2170
2171           if (fde->initial_location == 0
2172               && first_non_zero_fde != NULL
2173               && (first_non_zero_fde->initial_location
2174                   < fde->initial_location + fde->address_range))
2175             continue;
2176
2177           if (fde_prev != NULL
2178               && fde_prev->initial_location == fde->initial_location)
2179             continue;
2180
2181           obstack_grow (&objfile->objfile_obstack, &fde_table.entries[i],
2182                         sizeof (fde_table.entries[0]));
2183           ++fde_table2->num_entries;
2184           fde_prev = fde;
2185         }
2186       fde_table2->entries = obstack_finish (&objfile->objfile_obstack);
2187
2188       /* Discard the original fde_table.  */
2189       xfree (fde_table.entries);
2190     }
2191
2192   set_objfile_data (objfile, dwarf2_frame_objfile_data, fde_table2);
2193 }
2194
2195 /* Provide a prototype to silence -Wmissing-prototypes.  */
2196 void _initialize_dwarf2_frame (void);
2197
2198 void
2199 _initialize_dwarf2_frame (void)
2200 {
2201   dwarf2_frame_data = gdbarch_data_register_pre_init (dwarf2_frame_init);
2202   dwarf2_frame_objfile_data = register_objfile_data ();
2203 }