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