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