GDB (xrefs)
/tmp/gdb-8.1/gdb/frame-unwind.c
Go to the documentation of this file.
1 /* Definitions for frame unwinder, for GDB, the GNU debugger.
2 
3  Copyright (C) 2003-2018 Free Software Foundation, Inc.
4 
5  This file is part of GDB.
6 
7  This program is free software; you can redistribute it and/or modify
8  it under the terms of the GNU General Public License as published by
9  the Free Software Foundation; either version 3 of the License, or
10  (at your option) any later version.
11 
12  This program is distributed in the hope that it will be useful,
13  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  GNU General Public License for more details.
16 
17  You should have received a copy of the GNU General Public License
18  along with this program. If not, see <http://www.gnu.org/licenses/>. */
19 
20 #include "defs.h"
21 #include "frame.h"
22 #include "frame-unwind.h"
23 #include "dummy-frame.h"
24 #include "inline-frame.h"
25 #include "value.h"
26 #include "regcache.h"
27 #include "gdb_obstack.h"
28 #include "target.h"
29 
31 
33 {
34  const struct frame_unwind *unwinder;
36 };
37 
39 {
41  /* The head of the OSABI part of the search list. */
43 };
44 
45 static void *
46 frame_unwind_init (struct obstack *obstack)
47 {
48  struct frame_unwind_table *table
49  = OBSTACK_ZALLOC (obstack, struct frame_unwind_table);
50 
51  /* Start the table out with a few default sniffers. OSABI code
52  can't override this. */
53  table->list = OBSTACK_ZALLOC (obstack, struct frame_unwind_table_entry);
54  table->list->unwinder = &dummy_frame_unwind;
55  table->list->next = OBSTACK_ZALLOC (obstack,
58  /* The insertion point for OSABI sniffers. */
59  table->osabi_head = &table->list->next->next;
60  return table;
61 }
62 
63 void
65  const struct frame_unwind *unwinder)
66 {
67  struct frame_unwind_table *table
69  struct frame_unwind_table_entry *entry;
70 
71  /* Insert the new entry at the start of the list. */
73  entry->unwinder = unwinder;
74  entry->next = (*table->osabi_head);
75  (*table->osabi_head) = entry;
76 }
77 
78 void
80  const struct frame_unwind *unwinder)
81 {
82  struct frame_unwind_table *table
84  struct frame_unwind_table_entry **ip;
85 
86  /* Find the end of the list and insert the new entry there. */
87  for (ip = table->osabi_head; (*ip) != NULL; ip = &(*ip)->next);
89  (*ip)->unwinder = unwinder;
90 }
91 
92 /* Call SNIFFER from UNWINDER. If it succeeded set UNWINDER for
93  THIS_FRAME and return 1. Otherwise the function keeps THIS_FRAME
94  unchanged and returns 0. */
95 
96 static int
97 frame_unwind_try_unwinder (struct frame_info *this_frame, void **this_cache,
98  const struct frame_unwind *unwinder)
99 {
100  int res = 0;
101 
102  frame_prepare_for_sniffer (this_frame, unwinder);
103 
104  TRY
105  {
106  res = unwinder->sniffer (unwinder, this_frame, this_cache);
107  }
108  CATCH (ex, RETURN_MASK_ALL)
109  {
110  /* Catch all exceptions, caused by either interrupt or error.
111  Reset *THIS_CACHE. */
112  *this_cache = NULL;
113  if (ex.error == NOT_AVAILABLE_ERROR)
114  {
115  /* This usually means that not even the PC is available,
116  thus most unwinders aren't able to determine if they're
117  the best fit. Keep trying. Fallback prologue unwinders
118  should always accept the frame. */
119  frame_cleanup_after_sniffer (this_frame);
120  return 0;
121  }
122  throw_exception (ex);
123  }
124  END_CATCH
125 
126  if (res)
127  return 1;
128  else
129  {
130  /* Don't set *THIS_CACHE to NULL here, because sniffer has to do
131  so. */
132  frame_cleanup_after_sniffer (this_frame);
133  return 0;
134  }
135  gdb_assert_not_reached ("frame_unwind_try_unwinder");
136 }
137 
138 /* Iterate through sniffers for THIS_FRAME frame until one returns with an
139  unwinder implementation. THIS_FRAME->UNWIND must be NULL, it will get set
140  by this function. Possibly initialize THIS_CACHE. */
141 
142 void
143 frame_unwind_find_by_frame (struct frame_info *this_frame, void **this_cache)
144 {
145  struct gdbarch *gdbarch = get_frame_arch (this_frame);
146  struct frame_unwind_table *table
148  struct frame_unwind_table_entry *entry;
149  const struct frame_unwind *unwinder_from_target;
150 
151  unwinder_from_target = target_get_unwinder ();
152  if (unwinder_from_target != NULL
153  && frame_unwind_try_unwinder (this_frame, this_cache,
154  unwinder_from_target))
155  return;
156 
157  unwinder_from_target = target_get_tailcall_unwinder ();
158  if (unwinder_from_target != NULL
159  && frame_unwind_try_unwinder (this_frame, this_cache,
160  unwinder_from_target))
161  return;
162 
163  for (entry = table->list; entry != NULL; entry = entry->next)
164  if (frame_unwind_try_unwinder (this_frame, this_cache, entry->unwinder))
165  return;
166 
167  internal_error (__FILE__, __LINE__, _("frame_unwind_find_by_frame failed"));
168 }
169 
170 /* A default frame sniffer which always accepts the frame. Used by
171  fallback prologue unwinders. */
172 
173 int
175  struct frame_info *this_frame,
176  void **this_prologue_cache)
177 {
178  return 1;
179 }
180 
181 /* The default frame unwinder stop_reason callback. */
182 
185  void **this_cache)
186 {
187  struct frame_id this_id = get_frame_id (this_frame);
188 
189  if (frame_id_eq (this_id, outer_frame_id))
190  return UNWIND_OUTERMOST;
191  else
192  return UNWIND_NO_REASON;
193 }
194 
195 /* Helper functions for value-based register unwinding. These return
196  a (possibly lazy) value of the appropriate type. */
197 
198 /* Return a value which indicates that FRAME did not save REGNUM. */
199 
200 struct value *
202 {
203  struct gdbarch *gdbarch = frame_unwind_arch (frame);
204  struct type *type = register_type (gdbarch, regnum);
205  struct value *val;
206 
207  /* Return an lval_register value, so that we print it as
208  "<not saved>". */
209  val = allocate_value_lazy (type);
210  set_value_lazy (val, 0);
212  VALUE_LVAL (val) = lval_register;
213  VALUE_REGNUM (val) = regnum;
214  VALUE_NEXT_FRAME_ID (val)
216  return val;
217 }
218 
219 /* Return a value which indicates that FRAME copied REGNUM into
220  register NEW_REGNUM. */
221 
222 struct value *
224  int regnum, int new_regnum)
225 {
226  return value_of_register_lazy (frame, new_regnum);
227 }
228 
229 /* Return a value which indicates that FRAME saved REGNUM in memory at
230  ADDR. */
231 
232 struct value *
234 {
235  struct gdbarch *gdbarch = frame_unwind_arch (frame);
236  struct value *v = value_at_lazy (register_type (gdbarch, regnum), addr);
237 
238  set_value_stack (v, 1);
239  return v;
240 }
241 
242 /* Return a value which indicates that FRAME's saved version of
243  REGNUM has a known constant (computed) value of VAL. */
244 
245 struct value *
247  ULONGEST val)
248 {
249  struct gdbarch *gdbarch = frame_unwind_arch (frame);
250  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
251  struct value *reg_val;
252 
255  register_size (gdbarch, regnum), byte_order, val);
256  return reg_val;
257 }
258 
259 struct value *
261 {
262  struct gdbarch *gdbarch = frame_unwind_arch (frame);
263  struct value *reg_val;
264 
266  memcpy (value_contents_raw (reg_val), buf, register_size (gdbarch, regnum));
267  return reg_val;
268 }
269 
270 /* Return a value which indicates that FRAME's saved version of REGNUM
271  has a known constant (computed) value of ADDR. Convert the
272  CORE_ADDR to a target address if necessary. */
273 
274 struct value *
276  CORE_ADDR addr)
277 {
278  struct gdbarch *gdbarch = frame_unwind_arch (frame);
279  struct value *reg_val;
280 
283  register_type (gdbarch, regnum), addr);
284  return reg_val;
285 }
286 
287 void
289 {
291 }
struct value * value_zero(struct type *type, enum lval_type lv)
Definition: valops.c:847
struct value * frame_unwind_got_bytes(struct frame_info *frame, int regnum, gdb_byte *buf)
Definition: frame-unwind.c:260
bfd_vma CORE_ADDR
Definition: common-types.h:41
const struct frame_unwind * target_get_tailcall_unwinder(void)
Definition: target.c:3756
const struct frame_unwind * target_get_unwinder(void)
Definition: target.c:3748
struct value * frame_unwind_got_memory(struct frame_info *frame, int regnum, CORE_ADDR addr)
Definition: frame-unwind.c:233
const struct frame_unwind dummy_frame_unwind
Definition: dummy-frame.c:378
#define VALUE_NEXT_FRAME_ID(val)
Definition: value.h:441
struct frame_unwind_table_entry * next
Definition: frame-unwind.c:35
void frame_cleanup_after_sniffer(struct frame_info *frame)
Definition: frame.c:2867
struct value * allocate_value_lazy(struct type *type)
Definition: value.c:916
void internal_error(const char *file, int line, const char *fmt,...)
Definition: errors.c:50
frame_sniffer_ftype * sniffer
Definition: frame-unwind.h:155
void set_value_lazy(struct value *value, int val)
Definition: value.c:1389
unwind_stop_reason
Definition: frame.h:504
struct gdbarch_data * gdbarch_data_register_pre_init(gdbarch_data_pre_init_ftype *pre_init)
Definition: gdbarch.c:5130
#define _(String)
Definition: gdb_locale.h:35
void frame_prepare_for_sniffer(struct frame_info *frame, const struct frame_unwind *unwind)
Definition: frame.c:2897
#define END_CATCH
void frame_unwind_prepend_unwinder(struct gdbarch *gdbarch, const struct frame_unwind *unwinder)
Definition: frame-unwind.c:64
#define VALUE_LVAL(val)
Definition: value.h:414
void frame_unwind_append_unwinder(struct gdbarch *gdbarch, const struct frame_unwind *unwinder)
Definition: frame-unwind.c:79
#define GDBARCH_OBSTACK_ZALLOC(GDBARCH, TYPE)
Definition: gdbarch.h:1709
struct gdbarch * frame_unwind_arch(struct frame_info *next_frame)
Definition: frame.c:2697
struct value * frame_unwind_got_constant(struct frame_info *frame, int regnum, ULONGEST val)
Definition: frame-unwind.c:246
void frame_unwind_find_by_frame(struct frame_info *this_frame, void **this_cache)
Definition: frame-unwind.c:143
#define TRY
int frame_id_eq(struct frame_id l, struct frame_id r)
Definition: frame.c:674
struct frame_id get_frame_id(struct frame_info *fi)
Definition: frame.c:520
#define CATCH(EXCEPTION, MASK)
struct frame_unwind_table_entry ** osabi_head
Definition: frame-unwind.c:42
struct value * value_of_register_lazy(struct frame_info *frame, int regnum)
Definition: findvar.c:284
const struct frame_unwind * unwinder
Definition: frame-unwind.c:34
struct type * register_type(struct gdbarch *gdbarch, int regnum)
Definition: regcache.c:152
#define gdb_assert_not_reached(message)
Definition: gdb_assert.h:55
enum bfd_endian gdbarch_byte_order(struct gdbarch *gdbarch)
Definition: gdbarch.c:1509
Definition: gdbtypes.h:749
#define VALUE_REGNUM(val)
Definition: value.h:451
const struct frame_unwind inline_frame_unwind
Definition: inline-frame.c:263
int default_frame_sniffer(const struct frame_unwind *self, struct frame_info *this_frame, void **this_prologue_cache)
Definition: frame-unwind.c:174
gdb_byte * value_contents_writeable(struct value *value)
Definition: value.c:1416
static int frame_unwind_try_unwinder(struct frame_info *this_frame, void **this_cache, const struct frame_unwind *unwinder)
Definition: frame-unwind.c:97
struct frame_info * get_next_frame_sentinel_okay(struct frame_info *this_frame)
Definition: frame.c:1784
struct value * value_at_lazy(struct type *type, CORE_ADDR addr)
Definition: valops.c:944
void _initialize_frame_unwind(void)
Definition: frame-unwind.c:288
int regnum
Definition: aarch64-tdep.c:77
Definition: value.c:169
struct value * frame_unwind_got_optimized(struct frame_info *frame, int regnum)
Definition: frame-unwind.c:201
void throw_exception(struct gdb_exception exception)
bfd_byte gdb_byte
Definition: common-types.h:38
void mark_value_bytes_optimized_out(struct value *value, int offset, int length)
Definition: value.c:1448
struct value * frame_unwind_got_register(struct frame_info *frame, int regnum, int new_regnum)
Definition: frame-unwind.c:223
static struct gdbarch_data * frame_unwind_data
Definition: frame-unwind.c:30
void set_value_stack(struct value *value, int val)
Definition: value.c:1401
static void * frame_unwind_init(struct obstack *obstack)
Definition: frame-unwind.c:46
Definition: frame-unwind.c:32
unsigned long long ULONGEST
Definition: common-types.h:53
enum unwind_stop_reason default_frame_unwind_stop_reason(struct frame_info *this_frame, void **this_cache)
Definition: frame-unwind.c:184
const struct frame_id outer_frame_id
Definition: frame.c:577
struct value * frame_unwind_got_address(struct frame_info *frame, int regnum, CORE_ADDR addr)
Definition: frame-unwind.c:275
int register_size(struct gdbarch *gdbarch, int regnum)
Definition: regcache.c:164
gdb_byte * value_contents_raw(struct value *value)
Definition: value.c:1158
struct frame_unwind_table_entry * list
Definition: frame-unwind.c:40
#define OBSTACK_ZALLOC(OBSTACK, TYPE)
Definition: gdb_obstack.h:27
#define TYPE_LENGTH(thistype)
Definition: gdbtypes.h:1235
Definition: defs.h:381
void pack_long(gdb_byte *buf, struct type *type, LONGEST num)
Definition: value.c:3450
enum bfd_endian byte_order
Definition: gdbarch.c:137
struct gdbarch * get_frame_arch(struct frame_info *this_frame)
Definition: frame.c:2691
static void store_unsigned_integer(gdb_byte *addr, int len, enum bfd_endian byte_order, ULONGEST val)
Definition: defs.h:604