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