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