OSDN Git Service

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