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