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