Replace copyreloc-main.c with copyreloc-main.S
[platform/upstream/binutils.git] / gdb / frame-unwind.c
1 /* Definitions for frame unwinder, for GDB, the GNU debugger.
2
3    Copyright (C) 2003-2014 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
30 static struct gdbarch_data *frame_unwind_data;
31
32 struct frame_unwind_table_entry
33 {
34   const struct frame_unwind *unwinder;
35   struct frame_unwind_table_entry *next;
36 };
37
38 struct frame_unwind_table
39 {
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;
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,
56                                       struct frame_unwind_table_entry);
57   table->list->next->unwinder = &inline_frame_unwind;
58   /* The insertion point for OSABI sniffers.  */
59   table->osabi_head = &table->list->next->next;
60   return table;
61 }
62
63 void
64 frame_unwind_prepend_unwinder (struct gdbarch *gdbarch,
65                                 const struct frame_unwind *unwinder)
66 {
67   struct frame_unwind_table *table = gdbarch_data (gdbarch, frame_unwind_data);
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;
75 }
76
77 void
78 frame_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
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
94 static int
95 frame_unwind_try_unwinder (struct frame_info *this_frame, void **this_cache,
96                           const struct frame_unwind *unwinder)
97 {
98   struct cleanup *old_cleanup;
99   volatile struct gdb_exception ex;
100   int res = 0;
101
102   old_cleanup = frame_prepare_for_sniffer (this_frame, unwinder);
103
104   TRY_CATCH (ex, RETURN_MASK_ERROR)
105     {
106       res = unwinder->sniffer (unwinder, this_frame, this_cache);
107     }
108   if (ex.reason < 0 && ex.error == NOT_AVAILABLE_ERROR)
109     {
110       /* This usually means that not even the PC is available,
111         thus most unwinders aren't able to determine if they're
112         the best fit.  Keep trying.  Fallback prologue unwinders
113         should always accept the frame.  */
114       do_cleanups (old_cleanup);
115       return 0;
116     }
117   else if (ex.reason < 0)
118     throw_exception (ex);
119   else if (res)
120     {
121       discard_cleanups (old_cleanup);
122       return 1;
123     }
124   else
125     {
126       do_cleanups (old_cleanup);
127       return 0;
128     }
129   gdb_assert_not_reached ("frame_unwind_try_unwinder");
130 }
131
132 /* Iterate through sniffers for THIS_FRAME frame until one returns with an
133    unwinder implementation.  THIS_FRAME->UNWIND must be NULL, it will get set
134    by this function.  Possibly initialize THIS_CACHE.  */
135
136 void
137 frame_unwind_find_by_frame (struct frame_info *this_frame, void **this_cache)
138 {
139   struct gdbarch *gdbarch = get_frame_arch (this_frame);
140   struct frame_unwind_table *table = gdbarch_data (gdbarch, frame_unwind_data);
141   struct frame_unwind_table_entry *entry;
142   const struct frame_unwind *unwinder_from_target;
143
144   unwinder_from_target = target_get_unwinder ();
145   if (unwinder_from_target != NULL
146       && frame_unwind_try_unwinder (this_frame, this_cache,
147                                    unwinder_from_target))
148     return;
149
150   unwinder_from_target = target_get_tailcall_unwinder ();
151   if (unwinder_from_target != NULL
152       && frame_unwind_try_unwinder (this_frame, this_cache,
153                                    unwinder_from_target))
154     return;
155
156   for (entry = table->list; entry != NULL; entry = entry->next)
157     if (frame_unwind_try_unwinder (this_frame, this_cache, entry->unwinder))
158       return;
159
160   internal_error (__FILE__, __LINE__, _("frame_unwind_find_by_frame failed"));
161 }
162
163 /* A default frame sniffer which always accepts the frame.  Used by
164    fallback prologue unwinders.  */
165
166 int
167 default_frame_sniffer (const struct frame_unwind *self,
168                        struct frame_info *this_frame,
169                        void **this_prologue_cache)
170 {
171   return 1;
172 }
173
174 /* The default frame unwinder stop_reason callback.  */
175
176 enum unwind_stop_reason
177 default_frame_unwind_stop_reason (struct frame_info *this_frame,
178                                   void **this_cache)
179 {
180   struct frame_id this_id = get_frame_id (this_frame);
181
182   if (frame_id_eq (this_id, outer_frame_id))
183     return UNWIND_OUTERMOST;
184   else
185     return UNWIND_NO_REASON;
186 }
187
188 /* Helper functions for value-based register unwinding.  These return
189    a (possibly lazy) value of the appropriate type.  */
190
191 /* Return a value which indicates that FRAME did not save REGNUM.  */
192
193 struct value *
194 frame_unwind_got_optimized (struct frame_info *frame, int regnum)
195 {
196   struct gdbarch *gdbarch = frame_unwind_arch (frame);
197   struct type *type = register_type (gdbarch, regnum);
198   struct value *val;
199
200   /* Return an lval_register value, so that we print it as
201      "<not saved>".  */
202   val = allocate_value_lazy (type);
203   set_value_lazy (val, 0);
204   mark_value_bytes_optimized_out (val, 0, TYPE_LENGTH (type));
205   VALUE_LVAL (val) = lval_register;
206   VALUE_REGNUM (val) = regnum;
207   VALUE_FRAME_ID (val) = get_frame_id (frame);
208   return val;
209 }
210
211 /* Return a value which indicates that FRAME copied REGNUM into
212    register NEW_REGNUM.  */
213
214 struct value *
215 frame_unwind_got_register (struct frame_info *frame,
216                            int regnum, int new_regnum)
217 {
218   return value_of_register_lazy (frame, new_regnum);
219 }
220
221 /* Return a value which indicates that FRAME saved REGNUM in memory at
222    ADDR.  */
223
224 struct value *
225 frame_unwind_got_memory (struct frame_info *frame, int regnum, CORE_ADDR addr)
226 {
227   struct gdbarch *gdbarch = frame_unwind_arch (frame);
228   struct value *v = value_at_lazy (register_type (gdbarch, regnum), addr);
229
230   set_value_stack (v, 1);
231   return v;
232 }
233
234 /* Return a value which indicates that FRAME's saved version of
235    REGNUM has a known constant (computed) value of VAL.  */
236
237 struct value *
238 frame_unwind_got_constant (struct frame_info *frame, int regnum,
239                            ULONGEST val)
240 {
241   struct gdbarch *gdbarch = frame_unwind_arch (frame);
242   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
243   struct value *reg_val;
244
245   reg_val = value_zero (register_type (gdbarch, regnum), not_lval);
246   store_unsigned_integer (value_contents_writeable (reg_val),
247                           register_size (gdbarch, regnum), byte_order, val);
248   return reg_val;
249 }
250
251 struct value *
252 frame_unwind_got_bytes (struct frame_info *frame, int regnum, gdb_byte *buf)
253 {
254   struct gdbarch *gdbarch = frame_unwind_arch (frame);
255   struct value *reg_val;
256
257   reg_val = value_zero (register_type (gdbarch, regnum), not_lval);
258   memcpy (value_contents_raw (reg_val), buf, register_size (gdbarch, regnum));
259   return reg_val;
260 }
261
262 /* Return a value which indicates that FRAME's saved version of REGNUM
263    has a known constant (computed) value of ADDR.  Convert the
264    CORE_ADDR to a target address if necessary.  */
265
266 struct value *
267 frame_unwind_got_address (struct frame_info *frame, int regnum,
268                           CORE_ADDR addr)
269 {
270   struct gdbarch *gdbarch = frame_unwind_arch (frame);
271   struct value *reg_val;
272
273   reg_val = value_zero (register_type (gdbarch, regnum), not_lval);
274   pack_long (value_contents_writeable (reg_val),
275              register_type (gdbarch, regnum), addr);
276   return reg_val;
277 }
278
279 /* -Wmissing-prototypes */
280 extern initialize_file_ftype _initialize_frame_unwind;
281
282 void
283 _initialize_frame_unwind (void)
284 {
285   frame_unwind_data = gdbarch_data_register_pre_init (frame_unwind_init);
286 }