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