2004-02-06 Andrew Cagney <cagney@redhat.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 {
d4f10bf2
MK
664 /* It seems rather bizarre to specify an "empty" column as
665 the return adress column. However, this is exactly
666 what GCC does on some targets. It turns out that GCC
667 assumes that the return address can be found in the
668 register corresponding to the return address column.
669 Incidentally, that's how should treat a return address
670 column specifying "same value" too. */
671 if (fs->retaddr_column < fs->regs.num_regs
672 && fs->regs.reg[fs->retaddr_column].how != REG_UNSPECIFIED
673 && fs->regs.reg[fs->retaddr_column].how != REG_SAME_VALUE)
35889917
MK
674 cache->reg[regnum] = fs->regs.reg[fs->retaddr_column];
675 else
676 {
35889917
MK
677 cache->reg[regnum].loc.reg = fs->retaddr_column;
678 cache->reg[regnum].how = REG_SAVED_REG;
679 }
680 }
681 }
682 }
cfc14b3a
MK
683
684 do_cleanups (old_chain);
685
686 *this_cache = cache;
687 return cache;
688}
689
690static void
691dwarf2_frame_this_id (struct frame_info *next_frame, void **this_cache,
692 struct frame_id *this_id)
693{
694 struct dwarf2_frame_cache *cache =
695 dwarf2_frame_cache (next_frame, this_cache);
696
697 (*this_id) = frame_id_build (cache->cfa, frame_func_unwind (next_frame));
698}
699
700static void
701dwarf2_frame_prev_register (struct frame_info *next_frame, void **this_cache,
702 int regnum, int *optimizedp,
703 enum lval_type *lvalp, CORE_ADDR *addrp,
704 int *realnump, void *valuep)
705{
706 struct dwarf2_frame_cache *cache =
707 dwarf2_frame_cache (next_frame, this_cache);
708
709 switch (cache->reg[regnum].how)
710 {
3e2c4033
AC
711 case REG_UNDEFINED:
712 /* If CFI explicitly specified that the value isn't defined,
e4e9607c 713 mark it as optimized away; the value isn't available. */
cfc14b3a
MK
714 *optimizedp = 1;
715 *lvalp = not_lval;
716 *addrp = 0;
717 *realnump = -1;
35889917 718 if (valuep)
cfc14b3a
MK
719 {
720 /* In some cases, for example %eflags on the i386, we have
721 to provide a sane value, even though this register wasn't
722 saved. Assume we can get it from NEXT_FRAME. */
723 frame_unwind_register (next_frame, regnum, valuep);
724 }
725 break;
726
727 case REG_SAVED_OFFSET:
728 *optimizedp = 0;
729 *lvalp = lval_memory;
730 *addrp = cache->cfa + cache->reg[regnum].loc.offset;
731 *realnump = -1;
732 if (valuep)
733 {
734 /* Read the value in from memory. */
735 read_memory (*addrp, valuep,
736 register_size (current_gdbarch, regnum));
737 }
738 break;
739
740 case REG_SAVED_REG:
741 regnum = DWARF2_REG_TO_REGNUM (cache->reg[regnum].loc.reg);
742 frame_register_unwind (next_frame, regnum,
743 optimizedp, lvalp, addrp, realnump, valuep);
744 break;
745
746 case REG_SAVED_EXP:
747 *optimizedp = 0;
748 *lvalp = lval_memory;
749 *addrp = execute_stack_op (cache->reg[regnum].loc.exp,
750 cache->reg[regnum].exp_len,
751 next_frame, cache->cfa);
752 *realnump = -1;
753 if (valuep)
754 {
755 /* Read the value in from memory. */
756 read_memory (*addrp, valuep,
757 register_size (current_gdbarch, regnum));
758 }
759 break;
760
3e2c4033
AC
761 case REG_UNSPECIFIED:
762 /* GCC, in its infinite wisdom decided to not provide unwind
763 information for registers that are "same value". Since
764 DWARF2 (3 draft 7) doesn't define such behavior, said
765 registers are actually undefined (which is different to CFI
766 "undefined"). Code above issues a complaint about this.
767 Here just fudge the books, assume GCC, and that the value is
768 more inner on the stack. */
35889917
MK
769 frame_register_unwind (next_frame, regnum,
770 optimizedp, lvalp, addrp, realnump, valuep);
3e2c4033
AC
771 break;
772
773 case REG_SAME_VALUE:
cfc14b3a
MK
774 frame_register_unwind (next_frame, regnum,
775 optimizedp, lvalp, addrp, realnump, valuep);
776 break;
777
35889917
MK
778 case REG_CFA:
779 *optimizedp = 0;
780 *lvalp = not_lval;
781 *addrp = 0;
782 *realnump = -1;
783 if (valuep)
784 {
785 /* Store the value. */
786 store_typed_address (valuep, builtin_type_void_data_ptr, cache->cfa);
787 }
788 break;
789
cfc14b3a
MK
790 default:
791 internal_error (__FILE__, __LINE__, "Unknown register rule.");
792 }
793}
794
795static const struct frame_unwind dwarf2_frame_unwind =
796{
797 NORMAL_FRAME,
798 dwarf2_frame_this_id,
799 dwarf2_frame_prev_register
800};
801
802const struct frame_unwind *
336d1bba 803dwarf2_frame_sniffer (struct frame_info *next_frame)
cfc14b3a 804{
1ce5d6dd
AC
805 /* Grab an address that is guarenteed to reside somewhere within the
806 function. frame_pc_unwind(), for a no-return next function, can
807 end up returning something past the end of this function's body. */
808 CORE_ADDR block_addr = frame_unwind_address_in_block (next_frame);
809 if (dwarf2_frame_find_fde (&block_addr))
cfc14b3a
MK
810 return &dwarf2_frame_unwind;
811
812 return NULL;
813}
814\f
815
816/* There is no explicitly defined relationship between the CFA and the
817 location of frame's local variables and arguments/parameters.
818 Therefore, frame base methods on this page should probably only be
819 used as a last resort, just to avoid printing total garbage as a
820 response to the "info frame" command. */
821
822static CORE_ADDR
823dwarf2_frame_base_address (struct frame_info *next_frame, void **this_cache)
824{
825 struct dwarf2_frame_cache *cache =
826 dwarf2_frame_cache (next_frame, this_cache);
827
828 return cache->cfa;
829}
830
831static const struct frame_base dwarf2_frame_base =
832{
833 &dwarf2_frame_unwind,
834 dwarf2_frame_base_address,
835 dwarf2_frame_base_address,
836 dwarf2_frame_base_address
837};
838
839const struct frame_base *
336d1bba 840dwarf2_frame_base_sniffer (struct frame_info *next_frame)
cfc14b3a 841{
336d1bba 842 CORE_ADDR pc = frame_pc_unwind (next_frame);
cfc14b3a
MK
843 if (dwarf2_frame_find_fde (&pc))
844 return &dwarf2_frame_base;
845
846 return NULL;
847}
848\f
849/* A minimal decoding of DWARF2 compilation units. We only decode
850 what's needed to get to the call frame information. */
851
852struct comp_unit
853{
854 /* Keep the bfd convenient. */
855 bfd *abfd;
856
857 struct objfile *objfile;
858
859 /* Linked list of CIEs for this object. */
860 struct dwarf2_cie *cie;
861
862 /* Address size for this unit - from unit header. */
863 unsigned char addr_size;
864
865 /* Pointer to the .debug_frame section loaded into memory. */
866 char *dwarf_frame_buffer;
867
868 /* Length of the loaded .debug_frame section. */
869 unsigned long dwarf_frame_size;
870
871 /* Pointer to the .debug_frame section. */
872 asection *dwarf_frame_section;
0912c7f2
MK
873
874 /* Base for DW_EH_PE_datarel encodings. */
875 bfd_vma dbase;
0fd85043
CV
876
877 /* Base for DW_EH_PE_textrel encodings. */
878 bfd_vma tbase;
cfc14b3a
MK
879};
880
0d0e1a63
MK
881const struct objfile_data *dwarf2_frame_data;
882
cfc14b3a
MK
883static unsigned int
884read_1_byte (bfd *bfd, char *buf)
885{
886 return bfd_get_8 (abfd, (bfd_byte *) buf);
887}
888
889static unsigned int
890read_4_bytes (bfd *abfd, char *buf)
891{
892 return bfd_get_32 (abfd, (bfd_byte *) buf);
893}
894
895static ULONGEST
896read_8_bytes (bfd *abfd, char *buf)
897{
898 return bfd_get_64 (abfd, (bfd_byte *) buf);
899}
900
901static ULONGEST
902read_unsigned_leb128 (bfd *abfd, char *buf, unsigned int *bytes_read_ptr)
903{
904 ULONGEST result;
905 unsigned int num_read;
906 int shift;
907 unsigned char byte;
908
909 result = 0;
910 shift = 0;
911 num_read = 0;
912
913 do
914 {
915 byte = bfd_get_8 (abfd, (bfd_byte *) buf);
916 buf++;
917 num_read++;
918 result |= ((byte & 0x7f) << shift);
919 shift += 7;
920 }
921 while (byte & 0x80);
922
923 *bytes_read_ptr = num_read;
924
925 return result;
926}
927
928static LONGEST
929read_signed_leb128 (bfd *abfd, char *buf, unsigned int *bytes_read_ptr)
930{
931 LONGEST result;
932 int shift;
933 unsigned int num_read;
934 unsigned char byte;
935
936 result = 0;
937 shift = 0;
938 num_read = 0;
939
940 do
941 {
942 byte = bfd_get_8 (abfd, (bfd_byte *) buf);
943 buf++;
944 num_read++;
945 result |= ((byte & 0x7f) << shift);
946 shift += 7;
947 }
948 while (byte & 0x80);
949
950 if ((shift < 32) && (byte & 0x40))
951 result |= -(1 << shift);
952
953 *bytes_read_ptr = num_read;
954
955 return result;
956}
957
958static ULONGEST
959read_initial_length (bfd *abfd, char *buf, unsigned int *bytes_read_ptr)
960{
961 LONGEST result;
962
963 result = bfd_get_32 (abfd, (bfd_byte *) buf);
964 if (result == 0xffffffff)
965 {
966 result = bfd_get_64 (abfd, (bfd_byte *) buf + 4);
967 *bytes_read_ptr = 12;
968 }
969 else
970 *bytes_read_ptr = 4;
971
972 return result;
973}
974\f
975
976/* Pointer encoding helper functions. */
977
978/* GCC supports exception handling based on DWARF2 CFI. However, for
979 technical reasons, it encodes addresses in its FDE's in a different
980 way. Several "pointer encodings" are supported. The encoding
981 that's used for a particular FDE is determined by the 'R'
982 augmentation in the associated CIE. The argument of this
983 augmentation is a single byte.
984
985 The address can be encoded as 2 bytes, 4 bytes, 8 bytes, or as a
986 LEB128. This is encoded in bits 0, 1 and 2. Bit 3 encodes whether
987 the address is signed or unsigned. Bits 4, 5 and 6 encode how the
988 address should be interpreted (absolute, relative to the current
989 position in the FDE, ...). Bit 7, indicates that the address
990 should be dereferenced. */
991
992static unsigned char
993encoding_for_size (unsigned int size)
994{
995 switch (size)
996 {
997 case 2:
998 return DW_EH_PE_udata2;
999 case 4:
1000 return DW_EH_PE_udata4;
1001 case 8:
1002 return DW_EH_PE_udata8;
1003 default:
1004 internal_error (__FILE__, __LINE__, "Unsupported address size");
1005 }
1006}
1007
1008static unsigned int
1009size_of_encoded_value (unsigned char encoding)
1010{
1011 if (encoding == DW_EH_PE_omit)
1012 return 0;
1013
1014 switch (encoding & 0x07)
1015 {
1016 case DW_EH_PE_absptr:
1017 return TYPE_LENGTH (builtin_type_void_data_ptr);
1018 case DW_EH_PE_udata2:
1019 return 2;
1020 case DW_EH_PE_udata4:
1021 return 4;
1022 case DW_EH_PE_udata8:
1023 return 8;
1024 default:
1025 internal_error (__FILE__, __LINE__, "Invalid or unsupported encoding");
1026 }
1027}
1028
1029static CORE_ADDR
1030read_encoded_value (struct comp_unit *unit, unsigned char encoding,
1031 char *buf, unsigned int *bytes_read_ptr)
1032{
68f6cf99
MK
1033 int ptr_len = size_of_encoded_value (DW_EH_PE_absptr);
1034 ptrdiff_t offset;
cfc14b3a
MK
1035 CORE_ADDR base;
1036
1037 /* GCC currently doesn't generate DW_EH_PE_indirect encodings for
1038 FDE's. */
1039 if (encoding & DW_EH_PE_indirect)
1040 internal_error (__FILE__, __LINE__,
1041 "Unsupported encoding: DW_EH_PE_indirect");
1042
68f6cf99
MK
1043 *bytes_read_ptr = 0;
1044
cfc14b3a
MK
1045 switch (encoding & 0x70)
1046 {
1047 case DW_EH_PE_absptr:
1048 base = 0;
1049 break;
1050 case DW_EH_PE_pcrel:
1051 base = bfd_get_section_vma (unit->bfd, unit->dwarf_frame_section);
1052 base += (buf - unit->dwarf_frame_buffer);
1053 break;
0912c7f2
MK
1054 case DW_EH_PE_datarel:
1055 base = unit->dbase;
1056 break;
0fd85043
CV
1057 case DW_EH_PE_textrel:
1058 base = unit->tbase;
1059 break;
68f6cf99
MK
1060 case DW_EH_PE_aligned:
1061 base = 0;
1062 offset = buf - unit->dwarf_frame_buffer;
1063 if ((offset % ptr_len) != 0)
1064 {
1065 *bytes_read_ptr = ptr_len - (offset % ptr_len);
1066 buf += *bytes_read_ptr;
1067 }
1068 break;
cfc14b3a
MK
1069 default:
1070 internal_error (__FILE__, __LINE__, "Invalid or unsupported encoding");
1071 }
1072
1073 if ((encoding & 0x0f) == 0x00)
68f6cf99 1074 encoding |= encoding_for_size (ptr_len);
cfc14b3a
MK
1075
1076 switch (encoding & 0x0f)
1077 {
1078 case DW_EH_PE_udata2:
68f6cf99 1079 *bytes_read_ptr += 2;
cfc14b3a
MK
1080 return (base + bfd_get_16 (unit->abfd, (bfd_byte *) buf));
1081 case DW_EH_PE_udata4:
68f6cf99 1082 *bytes_read_ptr += 4;
cfc14b3a
MK
1083 return (base + bfd_get_32 (unit->abfd, (bfd_byte *) buf));
1084 case DW_EH_PE_udata8:
68f6cf99 1085 *bytes_read_ptr += 8;
cfc14b3a
MK
1086 return (base + bfd_get_64 (unit->abfd, (bfd_byte *) buf));
1087 case DW_EH_PE_sdata2:
68f6cf99 1088 *bytes_read_ptr += 2;
cfc14b3a
MK
1089 return (base + bfd_get_signed_16 (unit->abfd, (bfd_byte *) buf));
1090 case DW_EH_PE_sdata4:
68f6cf99 1091 *bytes_read_ptr += 4;
cfc14b3a
MK
1092 return (base + bfd_get_signed_32 (unit->abfd, (bfd_byte *) buf));
1093 case DW_EH_PE_sdata8:
68f6cf99 1094 *bytes_read_ptr += 8;
cfc14b3a
MK
1095 return (base + bfd_get_signed_64 (unit->abfd, (bfd_byte *) buf));
1096 default:
1097 internal_error (__FILE__, __LINE__, "Invalid or unsupported encoding");
1098 }
1099}
1100\f
1101
1102/* GCC uses a single CIE for all FDEs in a .debug_frame section.
1103 That's why we use a simple linked list here. */
1104
1105static struct dwarf2_cie *
1106find_cie (struct comp_unit *unit, ULONGEST cie_pointer)
1107{
1108 struct dwarf2_cie *cie = unit->cie;
1109
1110 while (cie)
1111 {
1112 if (cie->cie_pointer == cie_pointer)
1113 return cie;
1114
1115 cie = cie->next;
1116 }
1117
1118 return NULL;
1119}
1120
1121static void
1122add_cie (struct comp_unit *unit, struct dwarf2_cie *cie)
1123{
1124 cie->next = unit->cie;
1125 unit->cie = cie;
1126}
1127
1128/* Find the FDE for *PC. Return a pointer to the FDE, and store the
1129 inital location associated with it into *PC. */
1130
1131static struct dwarf2_fde *
1132dwarf2_frame_find_fde (CORE_ADDR *pc)
1133{
1134 struct objfile *objfile;
1135
1136 ALL_OBJFILES (objfile)
1137 {
1138 struct dwarf2_fde *fde;
1139 CORE_ADDR offset;
1140
0d0e1a63 1141 fde = objfile_data (objfile, dwarf2_frame_data);
4ae9ee8e
DJ
1142 if (fde == NULL)
1143 continue;
1144
1145 gdb_assert (objfile->section_offsets);
1146 offset = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
1147
cfc14b3a
MK
1148 while (fde)
1149 {
1150 if (*pc >= fde->initial_location + offset
1151 && *pc < fde->initial_location + offset + fde->address_range)
1152 {
1153 *pc = fde->initial_location + offset;
1154 return fde;
1155 }
1156
1157 fde = fde->next;
1158 }
1159 }
1160
1161 return NULL;
1162}
1163
1164static void
1165add_fde (struct comp_unit *unit, struct dwarf2_fde *fde)
1166{
0d0e1a63
MK
1167 fde->next = objfile_data (unit->objfile, dwarf2_frame_data);
1168 set_objfile_data (unit->objfile, dwarf2_frame_data, fde);
cfc14b3a
MK
1169}
1170
1171#ifdef CC_HAS_LONG_LONG
1172#define DW64_CIE_ID 0xffffffffffffffffULL
1173#else
1174#define DW64_CIE_ID ~0
1175#endif
1176
6896c0c7
RH
1177static char *decode_frame_entry (struct comp_unit *unit, char *start,
1178 int eh_frame_p);
cfc14b3a 1179
6896c0c7
RH
1180/* Decode the next CIE or FDE. Return NULL if invalid input, otherwise
1181 the next byte to be processed. */
cfc14b3a 1182static char *
6896c0c7 1183decode_frame_entry_1 (struct comp_unit *unit, char *start, int eh_frame_p)
cfc14b3a 1184{
6896c0c7 1185 char *buf;
cfc14b3a
MK
1186 LONGEST length;
1187 unsigned int bytes_read;
6896c0c7
RH
1188 int dwarf64_p;
1189 ULONGEST cie_id;
cfc14b3a 1190 ULONGEST cie_pointer;
cfc14b3a
MK
1191 char *end;
1192
6896c0c7 1193 buf = start;
cfc14b3a
MK
1194 length = read_initial_length (unit->abfd, buf, &bytes_read);
1195 buf += bytes_read;
1196 end = buf + length;
1197
6896c0c7
RH
1198 /* Are we still within the section? */
1199 if (end > unit->dwarf_frame_buffer + unit->dwarf_frame_size)
1200 return NULL;
1201
cfc14b3a
MK
1202 if (length == 0)
1203 return end;
1204
6896c0c7
RH
1205 /* Distinguish between 32 and 64-bit encoded frame info. */
1206 dwarf64_p = (bytes_read == 12);
cfc14b3a 1207
6896c0c7 1208 /* In a .eh_frame section, zero is used to distinguish CIEs from FDEs. */
cfc14b3a
MK
1209 if (eh_frame_p)
1210 cie_id = 0;
1211 else if (dwarf64_p)
1212 cie_id = DW64_CIE_ID;
6896c0c7
RH
1213 else
1214 cie_id = DW_CIE_ID;
cfc14b3a
MK
1215
1216 if (dwarf64_p)
1217 {
1218 cie_pointer = read_8_bytes (unit->abfd, buf);
1219 buf += 8;
1220 }
1221 else
1222 {
1223 cie_pointer = read_4_bytes (unit->abfd, buf);
1224 buf += 4;
1225 }
1226
1227 if (cie_pointer == cie_id)
1228 {
1229 /* This is a CIE. */
1230 struct dwarf2_cie *cie;
1231 char *augmentation;
1232
1233 /* Record the offset into the .debug_frame section of this CIE. */
1234 cie_pointer = start - unit->dwarf_frame_buffer;
1235
1236 /* Check whether we've already read it. */
1237 if (find_cie (unit, cie_pointer))
1238 return end;
1239
1240 cie = (struct dwarf2_cie *)
1241 obstack_alloc (&unit->objfile->psymbol_obstack,
1242 sizeof (struct dwarf2_cie));
1243 cie->initial_instructions = NULL;
1244 cie->cie_pointer = cie_pointer;
1245
1246 /* The encoding for FDE's in a normal .debug_frame section
1247 depends on the target address size as specified in the
1248 Compilation Unit Header. */
1249 cie->encoding = encoding_for_size (unit->addr_size);
1250
1251 /* Check version number. */
6896c0c7
RH
1252 if (read_1_byte (unit->abfd, buf) != DW_CIE_VERSION)
1253 return NULL;
cfc14b3a
MK
1254 buf += 1;
1255
1256 /* Interpret the interesting bits of the augmentation. */
1257 augmentation = buf;
1258 buf = augmentation + strlen (augmentation) + 1;
1259
1260 /* The GCC 2.x "eh" augmentation has a pointer immediately
1261 following the augmentation string, so it must be handled
1262 first. */
1263 if (augmentation[0] == 'e' && augmentation[1] == 'h')
1264 {
1265 /* Skip. */
1266 buf += TYPE_LENGTH (builtin_type_void_data_ptr);
1267 augmentation += 2;
1268 }
1269
1270 cie->code_alignment_factor =
1271 read_unsigned_leb128 (unit->abfd, buf, &bytes_read);
1272 buf += bytes_read;
1273
1274 cie->data_alignment_factor =
1275 read_signed_leb128 (unit->abfd, buf, &bytes_read);
1276 buf += bytes_read;
1277
1278 cie->return_address_register = read_1_byte (unit->abfd, buf);
1279 buf += 1;
1280
7131cb6e
RH
1281 cie->saw_z_augmentation = (*augmentation == 'z');
1282 if (cie->saw_z_augmentation)
cfc14b3a
MK
1283 {
1284 ULONGEST length;
1285
1286 length = read_unsigned_leb128 (unit->abfd, buf, &bytes_read);
1287 buf += bytes_read;
6896c0c7
RH
1288 if (buf > end)
1289 return NULL;
cfc14b3a
MK
1290 cie->initial_instructions = buf + length;
1291 augmentation++;
1292 }
1293
1294 while (*augmentation)
1295 {
1296 /* "L" indicates a byte showing how the LSDA pointer is encoded. */
1297 if (*augmentation == 'L')
1298 {
1299 /* Skip. */
1300 buf++;
1301 augmentation++;
1302 }
1303
1304 /* "R" indicates a byte indicating how FDE addresses are encoded. */
1305 else if (*augmentation == 'R')
1306 {
1307 cie->encoding = *buf++;
1308 augmentation++;
1309 }
1310
1311 /* "P" indicates a personality routine in the CIE augmentation. */
1312 else if (*augmentation == 'P')
1313 {
1314 /* Skip. */
1315 buf += size_of_encoded_value (*buf++);
1316 augmentation++;
1317 }
1318
1319 /* Otherwise we have an unknown augmentation.
1320 Bail out unless we saw a 'z' prefix. */
1321 else
1322 {
1323 if (cie->initial_instructions == NULL)
1324 return end;
1325
1326 /* Skip unknown augmentations. */
1327 buf = cie->initial_instructions;
1328 break;
1329 }
1330 }
1331
1332 cie->initial_instructions = buf;
1333 cie->end = end;
1334
1335 add_cie (unit, cie);
1336 }
1337 else
1338 {
1339 /* This is a FDE. */
1340 struct dwarf2_fde *fde;
1341
6896c0c7
RH
1342 /* In an .eh_frame section, the CIE pointer is the delta between the
1343 address within the FDE where the CIE pointer is stored and the
1344 address of the CIE. Convert it to an offset into the .eh_frame
1345 section. */
cfc14b3a
MK
1346 if (eh_frame_p)
1347 {
cfc14b3a
MK
1348 cie_pointer = buf - unit->dwarf_frame_buffer - cie_pointer;
1349 cie_pointer -= (dwarf64_p ? 8 : 4);
1350 }
1351
6896c0c7
RH
1352 /* In either case, validate the result is still within the section. */
1353 if (cie_pointer >= unit->dwarf_frame_size)
1354 return NULL;
1355
cfc14b3a
MK
1356 fde = (struct dwarf2_fde *)
1357 obstack_alloc (&unit->objfile->psymbol_obstack,
1358 sizeof (struct dwarf2_fde));
1359 fde->cie = find_cie (unit, cie_pointer);
1360 if (fde->cie == NULL)
1361 {
1362 decode_frame_entry (unit, unit->dwarf_frame_buffer + cie_pointer,
1363 eh_frame_p);
1364 fde->cie = find_cie (unit, cie_pointer);
1365 }
1366
1367 gdb_assert (fde->cie != NULL);
1368
1369 fde->initial_location =
1370 read_encoded_value (unit, fde->cie->encoding, buf, &bytes_read);
1371 buf += bytes_read;
1372
1373 fde->address_range =
1374 read_encoded_value (unit, fde->cie->encoding & 0x0f, buf, &bytes_read);
1375 buf += bytes_read;
1376
7131cb6e
RH
1377 /* A 'z' augmentation in the CIE implies the presence of an
1378 augmentation field in the FDE as well. The only thing known
1379 to be in here at present is the LSDA entry for EH. So we
1380 can skip the whole thing. */
1381 if (fde->cie->saw_z_augmentation)
1382 {
1383 ULONGEST length;
1384
1385 length = read_unsigned_leb128 (unit->abfd, buf, &bytes_read);
1386 buf += bytes_read + length;
6896c0c7
RH
1387 if (buf > end)
1388 return NULL;
7131cb6e
RH
1389 }
1390
cfc14b3a
MK
1391 fde->instructions = buf;
1392 fde->end = end;
1393
1394 add_fde (unit, fde);
1395 }
1396
1397 return end;
1398}
6896c0c7
RH
1399
1400/* Read a CIE or FDE in BUF and decode it. */
1401static char *
1402decode_frame_entry (struct comp_unit *unit, char *start, int eh_frame_p)
1403{
1404 enum { NONE, ALIGN4, ALIGN8, FAIL } workaround = NONE;
1405 char *ret;
1406 const char *msg;
1407 ptrdiff_t start_offset;
1408
1409 while (1)
1410 {
1411 ret = decode_frame_entry_1 (unit, start, eh_frame_p);
1412 if (ret != NULL)
1413 break;
1414
1415 /* We have corrupt input data of some form. */
1416
1417 /* ??? Try, weakly, to work around compiler/assembler/linker bugs
1418 and mismatches wrt padding and alignment of debug sections. */
1419 /* Note that there is no requirement in the standard for any
1420 alignment at all in the frame unwind sections. Testing for
1421 alignment before trying to interpret data would be incorrect.
1422
1423 However, GCC traditionally arranged for frame sections to be
1424 sized such that the FDE length and CIE fields happen to be
1425 aligned (in theory, for performance). This, unfortunately,
1426 was done with .align directives, which had the side effect of
1427 forcing the section to be aligned by the linker.
1428
1429 This becomes a problem when you have some other producer that
1430 creates frame sections that are not as strictly aligned. That
1431 produces a hole in the frame info that gets filled by the
1432 linker with zeros.
1433
1434 The GCC behaviour is arguably a bug, but it's effectively now
1435 part of the ABI, so we're now stuck with it, at least at the
1436 object file level. A smart linker may decide, in the process
1437 of compressing duplicate CIE information, that it can rewrite
1438 the entire output section without this extra padding. */
1439
1440 start_offset = start - unit->dwarf_frame_buffer;
1441 if (workaround < ALIGN4 && (start_offset & 3) != 0)
1442 {
1443 start += 4 - (start_offset & 3);
1444 workaround = ALIGN4;
1445 continue;
1446 }
1447 if (workaround < ALIGN8 && (start_offset & 7) != 0)
1448 {
1449 start += 8 - (start_offset & 7);
1450 workaround = ALIGN8;
1451 continue;
1452 }
1453
1454 /* Nothing left to try. Arrange to return as if we've consumed
1455 the entire input section. Hopefully we'll get valid info from
1456 the other of .debug_frame/.eh_frame. */
1457 workaround = FAIL;
1458 ret = unit->dwarf_frame_buffer + unit->dwarf_frame_size;
1459 break;
1460 }
1461
1462 switch (workaround)
1463 {
1464 case NONE:
1465 break;
1466
1467 case ALIGN4:
1468 complaint (&symfile_complaints,
1469 "Corrupt data in %s:%s; align 4 workaround apparently succeeded",
1470 unit->dwarf_frame_section->owner->filename,
1471 unit->dwarf_frame_section->name);
1472 break;
1473
1474 case ALIGN8:
1475 complaint (&symfile_complaints,
1476 "Corrupt data in %s:%s; align 8 workaround apparently succeeded",
1477 unit->dwarf_frame_section->owner->filename,
1478 unit->dwarf_frame_section->name);
1479 break;
1480
1481 default:
1482 complaint (&symfile_complaints,
1483 "Corrupt data in %s:%s",
1484 unit->dwarf_frame_section->owner->filename,
1485 unit->dwarf_frame_section->name);
1486 break;
1487 }
1488
1489 return ret;
1490}
1491
cfc14b3a
MK
1492\f
1493
1494/* FIXME: kettenis/20030504: This still needs to be integrated with
1495 dwarf2read.c in a better way. */
1496
1497/* Imported from dwarf2read.c. */
cfc14b3a 1498extern asection *dwarf_frame_section;
cfc14b3a
MK
1499extern asection *dwarf_eh_frame_section;
1500
1501/* Imported from dwarf2read.c. */
188dd5d6 1502extern char *dwarf2_read_section (struct objfile *objfile, asection *sectp);
cfc14b3a
MK
1503
1504void
1505dwarf2_build_frame_info (struct objfile *objfile)
1506{
1507 struct comp_unit unit;
1508 char *frame_ptr;
1509
1510 /* Build a minimal decoding of the DWARF2 compilation unit. */
1511 unit.abfd = objfile->obfd;
1512 unit.objfile = objfile;
1513 unit.addr_size = objfile->obfd->arch_info->bits_per_address / 8;
0912c7f2 1514 unit.dbase = 0;
0fd85043 1515 unit.tbase = 0;
cfc14b3a
MK
1516
1517 /* First add the information from the .eh_frame section. That way,
1518 the FDEs from that section are searched last. */
188dd5d6 1519 if (dwarf_eh_frame_section)
cfc14b3a 1520 {
0fd85043 1521 asection *got, *txt;
0912c7f2 1522
cfc14b3a
MK
1523 unit.cie = NULL;
1524 unit.dwarf_frame_buffer = dwarf2_read_section (objfile,
cfc14b3a
MK
1525 dwarf_eh_frame_section);
1526
188dd5d6
DJ
1527 unit.dwarf_frame_size
1528 = bfd_get_section_size_before_reloc (dwarf_eh_frame_section);
cfc14b3a
MK
1529 unit.dwarf_frame_section = dwarf_eh_frame_section;
1530
0912c7f2 1531 /* FIXME: kettenis/20030602: This is the DW_EH_PE_datarel base
37b517aa
MK
1532 that is used for the i386/amd64 target, which currently is
1533 the only target in GCC that supports/uses the
1534 DW_EH_PE_datarel encoding. */
0912c7f2
MK
1535 got = bfd_get_section_by_name (unit.abfd, ".got");
1536 if (got)
1537 unit.dbase = got->vma;
1538
22c7ba1a
MK
1539 /* GCC emits the DW_EH_PE_textrel encoding type on sh and ia64
1540 so far. */
0fd85043
CV
1541 txt = bfd_get_section_by_name (unit.abfd, ".text");
1542 if (txt)
1543 unit.tbase = txt->vma;
1544
cfc14b3a
MK
1545 frame_ptr = unit.dwarf_frame_buffer;
1546 while (frame_ptr < unit.dwarf_frame_buffer + unit.dwarf_frame_size)
1547 frame_ptr = decode_frame_entry (&unit, frame_ptr, 1);
1548 }
1549
188dd5d6 1550 if (dwarf_frame_section)
cfc14b3a
MK
1551 {
1552 unit.cie = NULL;
1553 unit.dwarf_frame_buffer = dwarf2_read_section (objfile,
cfc14b3a 1554 dwarf_frame_section);
188dd5d6
DJ
1555 unit.dwarf_frame_size
1556 = bfd_get_section_size_before_reloc (dwarf_frame_section);
cfc14b3a
MK
1557 unit.dwarf_frame_section = dwarf_frame_section;
1558
1559 frame_ptr = unit.dwarf_frame_buffer;
1560 while (frame_ptr < unit.dwarf_frame_buffer + unit.dwarf_frame_size)
1561 frame_ptr = decode_frame_entry (&unit, frame_ptr, 0);
1562 }
1563}
0d0e1a63
MK
1564
1565/* Provide a prototype to silence -Wmissing-prototypes. */
1566void _initialize_dwarf2_frame (void);
1567
1568void
1569_initialize_dwarf2_frame (void)
1570{
1571 dwarf2_frame_data = register_objfile_data ();
1572}
This page took 0.142574 seconds and 4 git commands to generate.