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