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