windows-nat: Don't change current_event.dwThreadId in handle_output_debug_string()
[deliverable/binutils-gdb.git] / gdb / frame-unwind.c
CommitLineData
494cca16
AC
1/* Definitions for frame unwinder, for GDB, the GNU debugger.
2
32d0add0 3 Copyright (C) 2003-2015 Free Software Foundation, Inc.
494cca16
AC
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
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
494cca16
AC
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
a9762ec7 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
494cca16
AC
19
20#include "defs.h"
21#include "frame.h"
22#include "frame-unwind.h"
494cca16 23#include "dummy-frame.h"
edb3359d 24#include "inline-frame.h"
669fac23
DJ
25#include "value.h"
26#include "regcache.h"
41fe5eb3 27#include "gdb_obstack.h"
ea001bdc 28#include "target.h"
494cca16
AC
29
30static struct gdbarch_data *frame_unwind_data;
31
41fe5eb3 32struct frame_unwind_table_entry
494cca16 33{
82417da5 34 const struct frame_unwind *unwinder;
41fe5eb3 35 struct frame_unwind_table_entry *next;
494cca16
AC
36};
37
41fe5eb3 38struct frame_unwind_table
494cca16 39{
fb2be677
AC
40 struct frame_unwind_table_entry *list;
41 /* The head of the OSABI part of the search list. */
42 struct frame_unwind_table_entry **osabi_head;
41fe5eb3 43};
494cca16
AC
44
45static void *
41fe5eb3 46frame_unwind_init (struct obstack *obstack)
494cca16 47{
41fe5eb3
AC
48 struct frame_unwind_table *table
49 = OBSTACK_ZALLOC (obstack, struct frame_unwind_table);
bb9bcb69 50
fb2be677
AC
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);
39d7b0e2 54 table->list->unwinder = &dummy_frame_unwind;
3e43a32a
MS
55 table->list->next = OBSTACK_ZALLOC (obstack,
56 struct frame_unwind_table_entry);
39d7b0e2 57 table->list->next->unwinder = &inline_frame_unwind;
fb2be677 58 /* The insertion point for OSABI sniffers. */
edb3359d 59 table->osabi_head = &table->list->next->next;
494cca16
AC
60 return table;
61}
62
82417da5 63void
fb2be677 64frame_unwind_prepend_unwinder (struct gdbarch *gdbarch,
82417da5
AC
65 const struct frame_unwind *unwinder)
66{
67 struct frame_unwind_table *table = gdbarch_data (gdbarch, frame_unwind_data);
fb2be677
AC
68 struct frame_unwind_table_entry *entry;
69
70 /* Insert the new entry at the start of the list. */
71 entry = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct frame_unwind_table_entry);
72 entry->unwinder = unwinder;
73 entry->next = (*table->osabi_head);
74 (*table->osabi_head) = entry;
82417da5
AC
75}
76
669fac23
DJ
77void
78frame_unwind_append_unwinder (struct gdbarch *gdbarch,
79 const struct frame_unwind *unwinder)
80{
81 struct frame_unwind_table *table = gdbarch_data (gdbarch, frame_unwind_data);
82 struct frame_unwind_table_entry **ip;
83
84 /* Find the end of the list and insert the new entry there. */
85 for (ip = table->osabi_head; (*ip) != NULL; ip = &(*ip)->next);
86 (*ip) = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct frame_unwind_table_entry);
87 (*ip)->unwinder = unwinder;
88}
89
ea001bdc
MM
90/* Call SNIFFER from UNWINDER. If it succeeded set UNWINDER for
91 THIS_FRAME and return 1. Otherwise the function keeps THIS_FRAME
92 unchanged and returns 0. */
93
94static int
95frame_unwind_try_unwinder (struct frame_info *this_frame, void **this_cache,
96 const struct frame_unwind *unwinder)
97{
98 struct cleanup *old_cleanup;
ea001bdc
MM
99 int res = 0;
100
101 old_cleanup = frame_prepare_for_sniffer (this_frame, unwinder);
102
492d29ea 103 TRY
ea001bdc
MM
104 {
105 res = unwinder->sniffer (unwinder, this_frame, this_cache);
106 }
492d29ea 107 CATCH (ex, RETURN_MASK_ERROR)
ea001bdc 108 {
7556d4a4
PA
109 if (ex.error == NOT_AVAILABLE_ERROR)
110 {
111 /* This usually means that not even the PC is available,
112 thus most unwinders aren't able to determine if they're
113 the best fit. Keep trying. Fallback prologue unwinders
114 should always accept the frame. */
115 do_cleanups (old_cleanup);
116 return 0;
117 }
118 throw_exception (ex);
ea001bdc 119 }
492d29ea 120 END_CATCH
7556d4a4
PA
121
122 if (res)
ea001bdc
MM
123 {
124 discard_cleanups (old_cleanup);
125 return 1;
126 }
127 else
128 {
129 do_cleanups (old_cleanup);
130 return 0;
131 }
132 gdb_assert_not_reached ("frame_unwind_try_unwinder");
133}
134
9f9a8002
JK
135/* Iterate through sniffers for THIS_FRAME frame until one returns with an
136 unwinder implementation. THIS_FRAME->UNWIND must be NULL, it will get set
137 by this function. Possibly initialize THIS_CACHE. */
138
139void
669fac23 140frame_unwind_find_by_frame (struct frame_info *this_frame, void **this_cache)
e8a89fe2 141{
669fac23 142 struct gdbarch *gdbarch = get_frame_arch (this_frame);
e8a89fe2 143 struct frame_unwind_table *table = gdbarch_data (gdbarch, frame_unwind_data);
41fe5eb3 144 struct frame_unwind_table_entry *entry;
ea001bdc
MM
145 const struct frame_unwind *unwinder_from_target;
146
147 unwinder_from_target = target_get_unwinder ();
148 if (unwinder_from_target != NULL
149 && frame_unwind_try_unwinder (this_frame, this_cache,
150 unwinder_from_target))
151 return;
152
153 unwinder_from_target = target_get_tailcall_unwinder ();
154 if (unwinder_from_target != NULL
155 && frame_unwind_try_unwinder (this_frame, this_cache,
156 unwinder_from_target))
157 return;
1c5465ac 158
fb2be677 159 for (entry = table->list; entry != NULL; entry = entry->next)
ea001bdc
MM
160 if (frame_unwind_try_unwinder (this_frame, this_cache, entry->unwinder))
161 return;
8fbca658 162
e2e0b3e5 163 internal_error (__FILE__, __LINE__, _("frame_unwind_find_by_frame failed"));
494cca16
AC
164}
165
669fac23
DJ
166/* A default frame sniffer which always accepts the frame. Used by
167 fallback prologue unwinders. */
168
169int
170default_frame_sniffer (const struct frame_unwind *self,
171 struct frame_info *this_frame,
172 void **this_prologue_cache)
173{
174 return 1;
175}
176
50fd528a 177/* The default frame unwinder stop_reason callback. */
8fbca658
PA
178
179enum unwind_stop_reason
180default_frame_unwind_stop_reason (struct frame_info *this_frame,
181 void **this_cache)
182{
50fd528a
PA
183 struct frame_id this_id = get_frame_id (this_frame);
184
185 if (frame_id_eq (this_id, outer_frame_id))
186 return UNWIND_OUTERMOST;
187 else
188 return UNWIND_NO_REASON;
8fbca658
PA
189}
190
669fac23
DJ
191/* Helper functions for value-based register unwinding. These return
192 a (possibly lazy) value of the appropriate type. */
193
194/* Return a value which indicates that FRAME did not save REGNUM. */
195
196struct value *
197frame_unwind_got_optimized (struct frame_info *frame, int regnum)
198{
908fa2aa
PA
199 struct gdbarch *gdbarch = frame_unwind_arch (frame);
200 struct type *type = register_type (gdbarch, regnum);
6bd273ae 201 struct value *val;
669fac23 202
908fa2aa
PA
203 /* Return an lval_register value, so that we print it as
204 "<not saved>". */
205 val = allocate_value_lazy (type);
6bd273ae 206 set_value_lazy (val, 0);
9a0dc9e3 207 mark_value_bytes_optimized_out (val, 0, TYPE_LENGTH (type));
908fa2aa
PA
208 VALUE_LVAL (val) = lval_register;
209 VALUE_REGNUM (val) = regnum;
210 VALUE_FRAME_ID (val) = get_frame_id (frame);
6bd273ae 211 return val;
669fac23
DJ
212}
213
214/* Return a value which indicates that FRAME copied REGNUM into
215 register NEW_REGNUM. */
216
217struct value *
3e43a32a
MS
218frame_unwind_got_register (struct frame_info *frame,
219 int regnum, int new_regnum)
669fac23
DJ
220{
221 return value_of_register_lazy (frame, new_regnum);
222}
223
224/* Return a value which indicates that FRAME saved REGNUM in memory at
225 ADDR. */
226
227struct value *
228frame_unwind_got_memory (struct frame_info *frame, int regnum, CORE_ADDR addr)
229{
36f15f55 230 struct gdbarch *gdbarch = frame_unwind_arch (frame);
4e5d721f 231 struct value *v = value_at_lazy (register_type (gdbarch, regnum), addr);
669fac23 232
4e5d721f
DE
233 set_value_stack (v, 1);
234 return v;
669fac23
DJ
235}
236
237/* Return a value which indicates that FRAME's saved version of
238 REGNUM has a known constant (computed) value of VAL. */
239
240struct value *
241frame_unwind_got_constant (struct frame_info *frame, int regnum,
242 ULONGEST val)
243{
36f15f55 244 struct gdbarch *gdbarch = frame_unwind_arch (frame);
e17a4113 245 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
669fac23
DJ
246 struct value *reg_val;
247
248 reg_val = value_zero (register_type (gdbarch, regnum), not_lval);
249 store_unsigned_integer (value_contents_writeable (reg_val),
e17a4113 250 register_size (gdbarch, regnum), byte_order, val);
669fac23
DJ
251 return reg_val;
252}
253
15c1e57f
JB
254struct value *
255frame_unwind_got_bytes (struct frame_info *frame, int regnum, gdb_byte *buf)
256{
36f15f55 257 struct gdbarch *gdbarch = frame_unwind_arch (frame);
15c1e57f
JB
258 struct value *reg_val;
259
260 reg_val = value_zero (register_type (gdbarch, regnum), not_lval);
261 memcpy (value_contents_raw (reg_val), buf, register_size (gdbarch, regnum));
262 return reg_val;
263}
264
669fac23
DJ
265/* Return a value which indicates that FRAME's saved version of REGNUM
266 has a known constant (computed) value of ADDR. Convert the
267 CORE_ADDR to a target address if necessary. */
268
269struct value *
270frame_unwind_got_address (struct frame_info *frame, int regnum,
271 CORE_ADDR addr)
272{
36f15f55 273 struct gdbarch *gdbarch = frame_unwind_arch (frame);
669fac23
DJ
274 struct value *reg_val;
275
276 reg_val = value_zero (register_type (gdbarch, regnum), not_lval);
277 pack_long (value_contents_writeable (reg_val),
278 register_type (gdbarch, regnum), addr);
279 return reg_val;
280}
281
3e43a32a
MS
282/* -Wmissing-prototypes */
283extern initialize_file_ftype _initialize_frame_unwind;
b9362cc7 284
494cca16
AC
285void
286_initialize_frame_unwind (void)
287{
41fe5eb3 288 frame_unwind_data = gdbarch_data_register_pre_init (frame_unwind_init);
494cca16 289}
This page took 1.085634 seconds and 4 git commands to generate.