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