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