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