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