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