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