* dwarf2loc.c (dwarf_expr_frame_base): Constify.
[platform/upstream/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, const 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     const 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, const 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 (const 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, const gdb_byte *insn_ptr,
404                      const 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, const gdb_byte *buf,
1415                     unsigned int *bytes_read_ptr,
1416                     CORE_ADDR func_base)
1417 {
1418   ptrdiff_t offset;
1419   CORE_ADDR base;
1420
1421   /* GCC currently doesn't generate DW_EH_PE_indirect encodings for
1422      FDE's.  */
1423   if (encoding & DW_EH_PE_indirect)
1424     internal_error (__FILE__, __LINE__, 
1425                     _("Unsupported encoding: DW_EH_PE_indirect"));
1426
1427   *bytes_read_ptr = 0;
1428
1429   switch (encoding & 0x70)
1430     {
1431     case DW_EH_PE_absptr:
1432       base = 0;
1433       break;
1434     case DW_EH_PE_pcrel:
1435       base = bfd_get_section_vma (unit->abfd, unit->dwarf_frame_section);
1436       base += (buf - unit->dwarf_frame_buffer);
1437       break;
1438     case DW_EH_PE_datarel:
1439       base = unit->dbase;
1440       break;
1441     case DW_EH_PE_textrel:
1442       base = unit->tbase;
1443       break;
1444     case DW_EH_PE_funcrel:
1445       base = func_base;
1446       break;
1447     case DW_EH_PE_aligned:
1448       base = 0;
1449       offset = buf - unit->dwarf_frame_buffer;
1450       if ((offset % ptr_len) != 0)
1451         {
1452           *bytes_read_ptr = ptr_len - (offset % ptr_len);
1453           buf += *bytes_read_ptr;
1454         }
1455       break;
1456     default:
1457       internal_error (__FILE__, __LINE__, _("Invalid or unsupported encoding"));
1458     }
1459
1460   if ((encoding & 0x07) == 0x00)
1461     {
1462       encoding |= encoding_for_size (ptr_len);
1463       if (bfd_get_sign_extend_vma (unit->abfd))
1464         encoding |= DW_EH_PE_signed;
1465     }
1466
1467   switch (encoding & 0x0f)
1468     {
1469     case DW_EH_PE_uleb128:
1470       {
1471         ULONGEST value;
1472         const gdb_byte *end_buf = buf + (sizeof (value) + 1) * 8 / 7;
1473
1474         *bytes_read_ptr += read_uleb128 (buf, end_buf, &value) - buf;
1475         return base + value;
1476       }
1477     case DW_EH_PE_udata2:
1478       *bytes_read_ptr += 2;
1479       return (base + bfd_get_16 (unit->abfd, (bfd_byte *) buf));
1480     case DW_EH_PE_udata4:
1481       *bytes_read_ptr += 4;
1482       return (base + bfd_get_32 (unit->abfd, (bfd_byte *) buf));
1483     case DW_EH_PE_udata8:
1484       *bytes_read_ptr += 8;
1485       return (base + bfd_get_64 (unit->abfd, (bfd_byte *) buf));
1486     case DW_EH_PE_sleb128:
1487       {
1488         LONGEST value;
1489         const gdb_byte *end_buf = buf + (sizeof (value) + 1) * 8 / 7;
1490
1491         *bytes_read_ptr += read_sleb128 (buf, end_buf, &value) - buf;
1492         return base + value;
1493       }
1494     case DW_EH_PE_sdata2:
1495       *bytes_read_ptr += 2;
1496       return (base + bfd_get_signed_16 (unit->abfd, (bfd_byte *) buf));
1497     case DW_EH_PE_sdata4:
1498       *bytes_read_ptr += 4;
1499       return (base + bfd_get_signed_32 (unit->abfd, (bfd_byte *) buf));
1500     case DW_EH_PE_sdata8:
1501       *bytes_read_ptr += 8;
1502       return (base + bfd_get_signed_64 (unit->abfd, (bfd_byte *) buf));
1503     default:
1504       internal_error (__FILE__, __LINE__, _("Invalid or unsupported encoding"));
1505     }
1506 }
1507 \f
1508
1509 static int
1510 bsearch_cie_cmp (const void *key, const void *element)
1511 {
1512   ULONGEST cie_pointer = *(ULONGEST *) key;
1513   struct dwarf2_cie *cie = *(struct dwarf2_cie **) element;
1514
1515   if (cie_pointer == cie->cie_pointer)
1516     return 0;
1517
1518   return (cie_pointer < cie->cie_pointer) ? -1 : 1;
1519 }
1520
1521 /* Find CIE with the given CIE_POINTER in CIE_TABLE.  */
1522 static struct dwarf2_cie *
1523 find_cie (struct dwarf2_cie_table *cie_table, ULONGEST cie_pointer)
1524 {
1525   struct dwarf2_cie **p_cie;
1526
1527   /* The C standard (ISO/IEC 9899:TC2) requires the BASE argument to
1528      bsearch be non-NULL.  */
1529   if (cie_table->entries == NULL)
1530     {
1531       gdb_assert (cie_table->num_entries == 0);
1532       return NULL;
1533     }
1534
1535   p_cie = bsearch (&cie_pointer, cie_table->entries, cie_table->num_entries,
1536                    sizeof (cie_table->entries[0]), bsearch_cie_cmp);
1537   if (p_cie != NULL)
1538     return *p_cie;
1539   return NULL;
1540 }
1541
1542 /* Add a pointer to new CIE to the CIE_TABLE, allocating space for it.  */
1543 static void
1544 add_cie (struct dwarf2_cie_table *cie_table, struct dwarf2_cie *cie)
1545 {
1546   const int n = cie_table->num_entries;
1547
1548   gdb_assert (n < 1
1549               || cie_table->entries[n - 1]->cie_pointer < cie->cie_pointer);
1550
1551   cie_table->entries =
1552       xrealloc (cie_table->entries, (n + 1) * sizeof (cie_table->entries[0]));
1553   cie_table->entries[n] = cie;
1554   cie_table->num_entries = n + 1;
1555 }
1556
1557 static int
1558 bsearch_fde_cmp (const void *key, const void *element)
1559 {
1560   CORE_ADDR seek_pc = *(CORE_ADDR *) key;
1561   struct dwarf2_fde *fde = *(struct dwarf2_fde **) element;
1562
1563   if (seek_pc < fde->initial_location)
1564     return -1;
1565   if (seek_pc < fde->initial_location + fde->address_range)
1566     return 0;
1567   return 1;
1568 }
1569
1570 /* Find the FDE for *PC.  Return a pointer to the FDE, and store the
1571    inital location associated with it into *PC.  */
1572
1573 static struct dwarf2_fde *
1574 dwarf2_frame_find_fde (CORE_ADDR *pc)
1575 {
1576   struct objfile *objfile;
1577
1578   ALL_OBJFILES (objfile)
1579     {
1580       struct dwarf2_fde_table *fde_table;
1581       struct dwarf2_fde **p_fde;
1582       CORE_ADDR offset;
1583       CORE_ADDR seek_pc;
1584
1585       fde_table = objfile_data (objfile, dwarf2_frame_objfile_data);
1586       if (fde_table == NULL)
1587         {
1588           dwarf2_build_frame_info (objfile);
1589           fde_table = objfile_data (objfile, dwarf2_frame_objfile_data);
1590         }
1591       gdb_assert (fde_table != NULL);
1592
1593       if (fde_table->num_entries == 0)
1594         continue;
1595
1596       gdb_assert (objfile->section_offsets);
1597       offset = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
1598
1599       gdb_assert (fde_table->num_entries > 0);
1600       if (*pc < offset + fde_table->entries[0]->initial_location)
1601         continue;
1602
1603       seek_pc = *pc - offset;
1604       p_fde = bsearch (&seek_pc, fde_table->entries, fde_table->num_entries,
1605                        sizeof (fde_table->entries[0]), bsearch_fde_cmp);
1606       if (p_fde != NULL)
1607         {
1608           *pc = (*p_fde)->initial_location + offset;
1609           return *p_fde;
1610         }
1611     }
1612   return NULL;
1613 }
1614
1615 /* Add a pointer to new FDE to the FDE_TABLE, allocating space for it.  */
1616 static void
1617 add_fde (struct dwarf2_fde_table *fde_table, struct dwarf2_fde *fde)
1618 {
1619   if (fde->address_range == 0)
1620     /* Discard useless FDEs.  */
1621     return;
1622
1623   fde_table->num_entries += 1;
1624   fde_table->entries =
1625       xrealloc (fde_table->entries,
1626                 fde_table->num_entries * sizeof (fde_table->entries[0]));
1627   fde_table->entries[fde_table->num_entries - 1] = fde;
1628 }
1629
1630 #ifdef CC_HAS_LONG_LONG
1631 #define DW64_CIE_ID 0xffffffffffffffffULL
1632 #else
1633 #define DW64_CIE_ID ~0
1634 #endif
1635
1636 static gdb_byte *decode_frame_entry (struct comp_unit *unit, gdb_byte *start,
1637                                      int eh_frame_p,
1638                                      struct dwarf2_cie_table *cie_table,
1639                                      struct dwarf2_fde_table *fde_table);
1640
1641 /* Decode the next CIE or FDE.  Return NULL if invalid input, otherwise
1642    the next byte to be processed.  */
1643 static gdb_byte *
1644 decode_frame_entry_1 (struct comp_unit *unit, gdb_byte *start, int eh_frame_p,
1645                       struct dwarf2_cie_table *cie_table,
1646                       struct dwarf2_fde_table *fde_table)
1647 {
1648   struct gdbarch *gdbarch = get_objfile_arch (unit->objfile);
1649   gdb_byte *buf, *end;
1650   LONGEST length;
1651   unsigned int bytes_read;
1652   int dwarf64_p;
1653   ULONGEST cie_id;
1654   ULONGEST cie_pointer;
1655
1656   buf = start;
1657   length = read_initial_length (unit->abfd, buf, &bytes_read);
1658   buf += bytes_read;
1659   end = buf + length;
1660
1661   /* Are we still within the section? */
1662   if (end > unit->dwarf_frame_buffer + unit->dwarf_frame_size)
1663     return NULL;
1664
1665   if (length == 0)
1666     return end;
1667
1668   /* Distinguish between 32 and 64-bit encoded frame info.  */
1669   dwarf64_p = (bytes_read == 12);
1670
1671   /* In a .eh_frame section, zero is used to distinguish CIEs from FDEs.  */
1672   if (eh_frame_p)
1673     cie_id = 0;
1674   else if (dwarf64_p)
1675     cie_id = DW64_CIE_ID;
1676   else
1677     cie_id = DW_CIE_ID;
1678
1679   if (dwarf64_p)
1680     {
1681       cie_pointer = read_8_bytes (unit->abfd, buf);
1682       buf += 8;
1683     }
1684   else
1685     {
1686       cie_pointer = read_4_bytes (unit->abfd, buf);
1687       buf += 4;
1688     }
1689
1690   if (cie_pointer == cie_id)
1691     {
1692       /* This is a CIE.  */
1693       struct dwarf2_cie *cie;
1694       char *augmentation;
1695       unsigned int cie_version;
1696
1697       /* Record the offset into the .debug_frame section of this CIE.  */
1698       cie_pointer = start - unit->dwarf_frame_buffer;
1699
1700       /* Check whether we've already read it.  */
1701       if (find_cie (cie_table, cie_pointer))
1702         return end;
1703
1704       cie = (struct dwarf2_cie *)
1705         obstack_alloc (&unit->objfile->objfile_obstack,
1706                        sizeof (struct dwarf2_cie));
1707       cie->initial_instructions = NULL;
1708       cie->cie_pointer = cie_pointer;
1709
1710       /* The encoding for FDE's in a normal .debug_frame section
1711          depends on the target address size.  */
1712       cie->encoding = DW_EH_PE_absptr;
1713
1714       /* The target address size.  For .eh_frame FDEs this is considered
1715          equal to the size of a target pointer.  For .dwarf_frame FDEs, 
1716          this is supposed to be the target address size from the associated
1717          CU header.  FIXME: We do not have a good way to determine the 
1718          latter.  Always use the target pointer size for now.  */
1719       cie->addr_size = gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT;
1720
1721       /* We'll determine the final value later, but we need to
1722          initialize it conservatively.  */
1723       cie->signal_frame = 0;
1724
1725       /* Check version number.  */
1726       cie_version = read_1_byte (unit->abfd, buf);
1727       if (cie_version != 1 && cie_version != 3 && cie_version != 4)
1728         return NULL;
1729       cie->version = cie_version;
1730       buf += 1;
1731
1732       /* Interpret the interesting bits of the augmentation.  */
1733       cie->augmentation = augmentation = (char *) buf;
1734       buf += (strlen (augmentation) + 1);
1735
1736       /* Ignore armcc augmentations.  We only use them for quirks,
1737          and that doesn't happen until later.  */
1738       if (strncmp (augmentation, "armcc", 5) == 0)
1739         augmentation += strlen (augmentation);
1740
1741       /* The GCC 2.x "eh" augmentation has a pointer immediately
1742          following the augmentation string, so it must be handled
1743          first.  */
1744       if (augmentation[0] == 'e' && augmentation[1] == 'h')
1745         {
1746           /* Skip.  */
1747           buf += gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT;
1748           augmentation += 2;
1749         }
1750
1751       if (cie->version >= 4)
1752         {
1753           /* FIXME: check that this is the same as from the CU header.  */
1754           cie->addr_size = read_1_byte (unit->abfd, buf);
1755           ++buf;
1756           cie->segment_size = read_1_byte (unit->abfd, buf);
1757           ++buf;
1758         }
1759       else
1760         {
1761           cie->addr_size = gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT;
1762           cie->segment_size = 0;
1763         }
1764
1765       cie->code_alignment_factor =
1766         read_unsigned_leb128 (unit->abfd, buf, &bytes_read);
1767       buf += bytes_read;
1768
1769       cie->data_alignment_factor =
1770         read_signed_leb128 (unit->abfd, buf, &bytes_read);
1771       buf += bytes_read;
1772
1773       if (cie_version == 1)
1774         {
1775           cie->return_address_register = read_1_byte (unit->abfd, buf);
1776           bytes_read = 1;
1777         }
1778       else
1779         cie->return_address_register = read_unsigned_leb128 (unit->abfd, buf,
1780                                                              &bytes_read);
1781       cie->return_address_register
1782         = dwarf2_frame_adjust_regnum (gdbarch,
1783                                       cie->return_address_register,
1784                                       eh_frame_p);
1785
1786       buf += bytes_read;
1787
1788       cie->saw_z_augmentation = (*augmentation == 'z');
1789       if (cie->saw_z_augmentation)
1790         {
1791           ULONGEST length;
1792
1793           length = read_unsigned_leb128 (unit->abfd, buf, &bytes_read);
1794           buf += bytes_read;
1795           if (buf > end)
1796             return NULL;
1797           cie->initial_instructions = buf + length;
1798           augmentation++;
1799         }
1800
1801       while (*augmentation)
1802         {
1803           /* "L" indicates a byte showing how the LSDA pointer is encoded.  */
1804           if (*augmentation == 'L')
1805             {
1806               /* Skip.  */
1807               buf++;
1808               augmentation++;
1809             }
1810
1811           /* "R" indicates a byte indicating how FDE addresses are encoded.  */
1812           else if (*augmentation == 'R')
1813             {
1814               cie->encoding = *buf++;
1815               augmentation++;
1816             }
1817
1818           /* "P" indicates a personality routine in the CIE augmentation.  */
1819           else if (*augmentation == 'P')
1820             {
1821               /* Skip.  Avoid indirection since we throw away the result.  */
1822               gdb_byte encoding = (*buf++) & ~DW_EH_PE_indirect;
1823               read_encoded_value (unit, encoding, cie->addr_size,
1824                                   buf, &bytes_read, 0);
1825               buf += bytes_read;
1826               augmentation++;
1827             }
1828
1829           /* "S" indicates a signal frame, such that the return
1830              address must not be decremented to locate the call frame
1831              info for the previous frame; it might even be the first
1832              instruction of a function, so decrementing it would take
1833              us to a different function.  */
1834           else if (*augmentation == 'S')
1835             {
1836               cie->signal_frame = 1;
1837               augmentation++;
1838             }
1839
1840           /* Otherwise we have an unknown augmentation.  Assume that either
1841              there is no augmentation data, or we saw a 'z' prefix.  */
1842           else
1843             {
1844               if (cie->initial_instructions)
1845                 buf = cie->initial_instructions;
1846               break;
1847             }
1848         }
1849
1850       cie->initial_instructions = buf;
1851       cie->end = end;
1852       cie->unit = unit;
1853
1854       add_cie (cie_table, cie);
1855     }
1856   else
1857     {
1858       /* This is a FDE.  */
1859       struct dwarf2_fde *fde;
1860
1861       /* In an .eh_frame section, the CIE pointer is the delta between the
1862          address within the FDE where the CIE pointer is stored and the
1863          address of the CIE.  Convert it to an offset into the .eh_frame
1864          section.  */
1865       if (eh_frame_p)
1866         {
1867           cie_pointer = buf - unit->dwarf_frame_buffer - cie_pointer;
1868           cie_pointer -= (dwarf64_p ? 8 : 4);
1869         }
1870
1871       /* In either case, validate the result is still within the section.  */
1872       if (cie_pointer >= unit->dwarf_frame_size)
1873         return NULL;
1874
1875       fde = (struct dwarf2_fde *)
1876         obstack_alloc (&unit->objfile->objfile_obstack,
1877                        sizeof (struct dwarf2_fde));
1878       fde->cie = find_cie (cie_table, cie_pointer);
1879       if (fde->cie == NULL)
1880         {
1881           decode_frame_entry (unit, unit->dwarf_frame_buffer + cie_pointer,
1882                               eh_frame_p, cie_table, fde_table);
1883           fde->cie = find_cie (cie_table, cie_pointer);
1884         }
1885
1886       gdb_assert (fde->cie != NULL);
1887
1888       fde->initial_location =
1889         read_encoded_value (unit, fde->cie->encoding, fde->cie->addr_size,
1890                             buf, &bytes_read, 0);
1891       buf += bytes_read;
1892
1893       fde->address_range =
1894         read_encoded_value (unit, fde->cie->encoding & 0x0f,
1895                             fde->cie->addr_size, buf, &bytes_read, 0);
1896       buf += bytes_read;
1897
1898       /* A 'z' augmentation in the CIE implies the presence of an
1899          augmentation field in the FDE as well.  The only thing known
1900          to be in here at present is the LSDA entry for EH.  So we
1901          can skip the whole thing.  */
1902       if (fde->cie->saw_z_augmentation)
1903         {
1904           ULONGEST length;
1905
1906           length = read_unsigned_leb128 (unit->abfd, buf, &bytes_read);
1907           buf += bytes_read + length;
1908           if (buf > end)
1909             return NULL;
1910         }
1911
1912       fde->instructions = buf;
1913       fde->end = end;
1914
1915       fde->eh_frame_p = eh_frame_p;
1916
1917       add_fde (fde_table, fde);
1918     }
1919
1920   return end;
1921 }
1922
1923 /* Read a CIE or FDE in BUF and decode it.  */
1924 static gdb_byte *
1925 decode_frame_entry (struct comp_unit *unit, gdb_byte *start, int eh_frame_p,
1926                     struct dwarf2_cie_table *cie_table,
1927                     struct dwarf2_fde_table *fde_table)
1928 {
1929   enum { NONE, ALIGN4, ALIGN8, FAIL } workaround = NONE;
1930   gdb_byte *ret;
1931   ptrdiff_t start_offset;
1932
1933   while (1)
1934     {
1935       ret = decode_frame_entry_1 (unit, start, eh_frame_p,
1936                                   cie_table, fde_table);
1937       if (ret != NULL)
1938         break;
1939
1940       /* We have corrupt input data of some form.  */
1941
1942       /* ??? Try, weakly, to work around compiler/assembler/linker bugs
1943          and mismatches wrt padding and alignment of debug sections.  */
1944       /* Note that there is no requirement in the standard for any
1945          alignment at all in the frame unwind sections.  Testing for
1946          alignment before trying to interpret data would be incorrect.
1947
1948          However, GCC traditionally arranged for frame sections to be
1949          sized such that the FDE length and CIE fields happen to be
1950          aligned (in theory, for performance).  This, unfortunately,
1951          was done with .align directives, which had the side effect of
1952          forcing the section to be aligned by the linker.
1953
1954          This becomes a problem when you have some other producer that
1955          creates frame sections that are not as strictly aligned.  That
1956          produces a hole in the frame info that gets filled by the 
1957          linker with zeros.
1958
1959          The GCC behaviour is arguably a bug, but it's effectively now
1960          part of the ABI, so we're now stuck with it, at least at the
1961          object file level.  A smart linker may decide, in the process
1962          of compressing duplicate CIE information, that it can rewrite
1963          the entire output section without this extra padding.  */
1964
1965       start_offset = start - unit->dwarf_frame_buffer;
1966       if (workaround < ALIGN4 && (start_offset & 3) != 0)
1967         {
1968           start += 4 - (start_offset & 3);
1969           workaround = ALIGN4;
1970           continue;
1971         }
1972       if (workaround < ALIGN8 && (start_offset & 7) != 0)
1973         {
1974           start += 8 - (start_offset & 7);
1975           workaround = ALIGN8;
1976           continue;
1977         }
1978
1979       /* Nothing left to try.  Arrange to return as if we've consumed
1980          the entire input section.  Hopefully we'll get valid info from
1981          the other of .debug_frame/.eh_frame.  */
1982       workaround = FAIL;
1983       ret = unit->dwarf_frame_buffer + unit->dwarf_frame_size;
1984       break;
1985     }
1986
1987   switch (workaround)
1988     {
1989     case NONE:
1990       break;
1991
1992     case ALIGN4:
1993       complaint (&symfile_complaints,
1994                  _("Corrupt data in %s:%s; align 4 workaround apparently succeeded"),
1995                  unit->dwarf_frame_section->owner->filename,
1996                  unit->dwarf_frame_section->name);
1997       break;
1998
1999     case ALIGN8:
2000       complaint (&symfile_complaints,
2001                  _("Corrupt data in %s:%s; align 8 workaround apparently succeeded"),
2002                  unit->dwarf_frame_section->owner->filename,
2003                  unit->dwarf_frame_section->name);
2004       break;
2005
2006     default:
2007       complaint (&symfile_complaints,
2008                  _("Corrupt data in %s:%s"),
2009                  unit->dwarf_frame_section->owner->filename,
2010                  unit->dwarf_frame_section->name);
2011       break;
2012     }
2013
2014   return ret;
2015 }
2016 \f
2017
2018 /* Imported from dwarf2read.c.  */
2019 extern void dwarf2_get_section_info (struct objfile *, const char *, asection **,
2020                                      gdb_byte **, bfd_size_type *);
2021
2022 static int
2023 qsort_fde_cmp (const void *a, const void *b)
2024 {
2025   struct dwarf2_fde *aa = *(struct dwarf2_fde **)a;
2026   struct dwarf2_fde *bb = *(struct dwarf2_fde **)b;
2027
2028   if (aa->initial_location == bb->initial_location)
2029     {
2030       if (aa->address_range != bb->address_range
2031           && aa->eh_frame_p == 0 && bb->eh_frame_p == 0)
2032         /* Linker bug, e.g. gold/10400.
2033            Work around it by keeping stable sort order.  */
2034         return (a < b) ? -1 : 1;
2035       else
2036         /* Put eh_frame entries after debug_frame ones.  */
2037         return aa->eh_frame_p - bb->eh_frame_p;
2038     }
2039
2040   return (aa->initial_location < bb->initial_location) ? -1 : 1;
2041 }
2042
2043 void
2044 dwarf2_build_frame_info (struct objfile *objfile)
2045 {
2046   struct comp_unit *unit;
2047   gdb_byte *frame_ptr;
2048   struct dwarf2_cie_table cie_table;
2049   struct dwarf2_fde_table fde_table;
2050   struct dwarf2_fde_table *fde_table2;
2051
2052   cie_table.num_entries = 0;
2053   cie_table.entries = NULL;
2054
2055   fde_table.num_entries = 0;
2056   fde_table.entries = NULL;
2057
2058   /* Build a minimal decoding of the DWARF2 compilation unit.  */
2059   unit = (struct comp_unit *) obstack_alloc (&objfile->objfile_obstack,
2060                                              sizeof (struct comp_unit));
2061   unit->abfd = objfile->obfd;
2062   unit->objfile = objfile;
2063   unit->dbase = 0;
2064   unit->tbase = 0;
2065
2066   dwarf2_get_section_info (objfile, ".eh_frame",
2067                            &unit->dwarf_frame_section,
2068                            &unit->dwarf_frame_buffer,
2069                            &unit->dwarf_frame_size);
2070   if (unit->dwarf_frame_size)
2071     {
2072       asection *got, *txt;
2073
2074       /* FIXME: kettenis/20030602: This is the DW_EH_PE_datarel base
2075          that is used for the i386/amd64 target, which currently is
2076          the only target in GCC that supports/uses the
2077          DW_EH_PE_datarel encoding.  */
2078       got = bfd_get_section_by_name (unit->abfd, ".got");
2079       if (got)
2080         unit->dbase = got->vma;
2081
2082       /* GCC emits the DW_EH_PE_textrel encoding type on sh and ia64
2083          so far.  */
2084       txt = bfd_get_section_by_name (unit->abfd, ".text");
2085       if (txt)
2086         unit->tbase = txt->vma;
2087
2088       frame_ptr = unit->dwarf_frame_buffer;
2089       while (frame_ptr < unit->dwarf_frame_buffer + unit->dwarf_frame_size)
2090         frame_ptr = decode_frame_entry (unit, frame_ptr, 1,
2091                                         &cie_table, &fde_table);
2092
2093       if (cie_table.num_entries != 0)
2094         {
2095           /* Reinit cie_table: debug_frame has different CIEs.  */
2096           xfree (cie_table.entries);
2097           cie_table.num_entries = 0;
2098           cie_table.entries = NULL;
2099         }
2100     }
2101
2102   dwarf2_get_section_info (objfile, ".debug_frame",
2103                            &unit->dwarf_frame_section,
2104                            &unit->dwarf_frame_buffer,
2105                            &unit->dwarf_frame_size);
2106   if (unit->dwarf_frame_size)
2107     {
2108       frame_ptr = unit->dwarf_frame_buffer;
2109       while (frame_ptr < unit->dwarf_frame_buffer + unit->dwarf_frame_size)
2110         frame_ptr = decode_frame_entry (unit, frame_ptr, 0,
2111                                         &cie_table, &fde_table);
2112     }
2113
2114   /* Discard the cie_table, it is no longer needed.  */
2115   if (cie_table.num_entries != 0)
2116     {
2117       xfree (cie_table.entries);
2118       cie_table.entries = NULL;   /* Paranoia.  */
2119       cie_table.num_entries = 0;  /* Paranoia.  */
2120     }
2121
2122   /* Copy fde_table to obstack: it is needed at runtime.  */
2123   fde_table2 = (struct dwarf2_fde_table *)
2124     obstack_alloc (&objfile->objfile_obstack, sizeof (*fde_table2));
2125
2126   if (fde_table.num_entries == 0)
2127     {
2128       fde_table2->entries = NULL;
2129       fde_table2->num_entries = 0;
2130     }
2131   else
2132     {
2133       struct dwarf2_fde *fde_prev = NULL;
2134       struct dwarf2_fde *first_non_zero_fde = NULL;
2135       int i;
2136
2137       /* Prepare FDE table for lookups.  */
2138       qsort (fde_table.entries, fde_table.num_entries,
2139              sizeof (fde_table.entries[0]), qsort_fde_cmp);
2140
2141       /* Check for leftovers from --gc-sections.  The GNU linker sets
2142          the relevant symbols to zero, but doesn't zero the FDE *end*
2143          ranges because there's no relocation there.  It's (offset,
2144          length), not (start, end).  On targets where address zero is
2145          just another valid address this can be a problem, since the
2146          FDEs appear to be non-empty in the output --- we could pick
2147          out the wrong FDE.  To work around this, when overlaps are
2148          detected, we prefer FDEs that do not start at zero.
2149
2150          Start by finding the first FDE with non-zero start.  Below
2151          we'll discard all FDEs that start at zero and overlap this
2152          one.  */
2153       for (i = 0; i < fde_table.num_entries; i++)
2154         {
2155           struct dwarf2_fde *fde = fde_table.entries[i];
2156
2157           if (fde->initial_location != 0)
2158             {
2159               first_non_zero_fde = fde;
2160               break;
2161             }
2162         }
2163
2164       /* Since we'll be doing bsearch, squeeze out identical (except
2165          for eh_frame_p) fde entries so bsearch result is predictable.
2166          Also discard leftovers from --gc-sections.  */
2167       fde_table2->num_entries = 0;
2168       for (i = 0; i < fde_table.num_entries; i++)
2169         {
2170           struct dwarf2_fde *fde = fde_table.entries[i];
2171
2172           if (fde->initial_location == 0
2173               && first_non_zero_fde != NULL
2174               && (first_non_zero_fde->initial_location
2175                   < fde->initial_location + fde->address_range))
2176             continue;
2177
2178           if (fde_prev != NULL
2179               && fde_prev->initial_location == fde->initial_location)
2180             continue;
2181
2182           obstack_grow (&objfile->objfile_obstack, &fde_table.entries[i],
2183                         sizeof (fde_table.entries[0]));
2184           ++fde_table2->num_entries;
2185           fde_prev = fde;
2186         }
2187       fde_table2->entries = obstack_finish (&objfile->objfile_obstack);
2188
2189       /* Discard the original fde_table.  */
2190       xfree (fde_table.entries);
2191     }
2192
2193   set_objfile_data (objfile, dwarf2_frame_objfile_data, fde_table2);
2194 }
2195
2196 /* Provide a prototype to silence -Wmissing-prototypes.  */
2197 void _initialize_dwarf2_frame (void);
2198
2199 void
2200 _initialize_dwarf2_frame (void)
2201 {
2202   dwarf2_frame_data = gdbarch_data_register_pre_init (dwarf2_frame_init);
2203   dwarf2_frame_objfile_data = register_objfile_data ();
2204 }