gdb: add target_ops::supports_displaced_step
[deliverable/binutils-gdb.git] / gdb / dwarf2 / frame-tailcall.c
CommitLineData
e1b16eb4
JK
1/* Virtual tail call frames unwinder for GDB.
2
b811d2c2 3 Copyright (C) 2010-2020 Free Software Foundation, Inc.
e1b16eb4
JK
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"
4de283e4 21#include "frame.h"
82ca8957
TT
22#include "dwarf2/frame-tailcall.h"
23#include "dwarf2/loc.h"
e1b16eb4 24#include "frame-unwind.h"
4de283e4 25#include "block.h"
d55e5aa6 26#include "hashtab.h"
4de283e4 27#include "gdbtypes.h"
e1b16eb4
JK
28#include "regcache.h"
29#include "value.h"
82ca8957 30#include "dwarf2/frame.h"
0d12e84c 31#include "gdbarch.h"
e1b16eb4
JK
32
33/* Contains struct tailcall_cache indexed by next_bottom_frame. */
34static htab_t cache_htab;
35
36/* Associate structure of the unwinder to call_site_chain. Lifetime of this
37 structure is maintained by REFC decremented by dealloc_cache, all of them
38 get deleted during reinit_frame_cache. */
39struct tailcall_cache
40{
41 /* It must be the first one of this struct. It is the furthest callee. */
42 struct frame_info *next_bottom_frame;
43
44 /* Reference count. The whole chain of virtual tail call frames shares one
45 tailcall_cache. */
46 int refc;
47
85102364 48 /* Associated found virtual tail call frames chain, it is never NULL. */
e1b16eb4
JK
49 struct call_site_chain *chain;
50
51 /* Cached pretended_chain_levels result. */
52 int chain_levels;
53
54 /* Unwound PC from the top (caller) frame, as it is not contained
55 in CHAIN. */
56 CORE_ADDR prev_pc;
57
58 /* Compensate SP in caller frames appropriately. prev_sp and
59 entry_cfa_sp_offset are valid only if PREV_SP_P. PREV_SP is SP at the top
60 (caller) frame. ENTRY_CFA_SP_OFFSET is shift of SP in tail call frames
61 against next_bottom_frame SP. */
62 unsigned prev_sp_p : 1;
63 CORE_ADDR prev_sp;
64 LONGEST entry_cfa_sp_offset;
65};
66
67/* hash_f for htab_create_alloc of cache_htab. */
68
69static hashval_t
70cache_hash (const void *arg)
71{
9a3c8263 72 const struct tailcall_cache *cache = (const struct tailcall_cache *) arg;
e1b16eb4
JK
73
74 return htab_hash_pointer (cache->next_bottom_frame);
75}
76
77/* eq_f for htab_create_alloc of cache_htab. */
78
79static int
80cache_eq (const void *arg1, const void *arg2)
81{
9a3c8263
SM
82 const struct tailcall_cache *cache1 = (const struct tailcall_cache *) arg1;
83 const struct tailcall_cache *cache2 = (const struct tailcall_cache *) arg2;
e1b16eb4
JK
84
85 return cache1->next_bottom_frame == cache2->next_bottom_frame;
86}
87
88/* Create new tailcall_cache for NEXT_BOTTOM_FRAME, NEXT_BOTTOM_FRAME must not
89 yet have been indexed by cache_htab. Caller holds one reference of the new
90 tailcall_cache. */
91
92static struct tailcall_cache *
93cache_new_ref1 (struct frame_info *next_bottom_frame)
94{
8d749320 95 struct tailcall_cache *cache = XCNEW (struct tailcall_cache);
e1b16eb4
JK
96 void **slot;
97
e1b16eb4
JK
98 cache->next_bottom_frame = next_bottom_frame;
99 cache->refc = 1;
100
101 slot = htab_find_slot (cache_htab, cache, INSERT);
102 gdb_assert (*slot == NULL);
103 *slot = cache;
104
105 return cache;
106}
107
108/* Create new reference to CACHE. */
109
110static void
111cache_ref (struct tailcall_cache *cache)
112{
113 gdb_assert (cache->refc > 0);
114
115 cache->refc++;
116}
117
118/* Drop reference to CACHE, possibly fully freeing it and unregistering it from
119 cache_htab. */
120
121static void
122cache_unref (struct tailcall_cache *cache)
123{
124 gdb_assert (cache->refc > 0);
125
126 if (!--cache->refc)
127 {
128 gdb_assert (htab_find_slot (cache_htab, cache, NO_INSERT) != NULL);
129 htab_remove_elt (cache_htab, cache);
130
131 xfree (cache->chain);
132 xfree (cache);
133 }
134}
135
136/* Return 1 if FI is a non-bottom (not the callee) tail call frame. Otherwise
137 return 0. */
138
139static int
140frame_is_tailcall (struct frame_info *fi)
141{
142 return frame_unwinder_is (fi, &dwarf2_tailcall_frame_unwind);
143}
144
145/* Try to find tailcall_cache in cache_htab if FI is a part of its virtual tail
146 call chain. Otherwise return NULL. No new reference is created. */
147
148static struct tailcall_cache *
149cache_find (struct frame_info *fi)
150{
151 struct tailcall_cache *cache;
152 void **slot;
153
154 while (frame_is_tailcall (fi))
155 {
156 fi = get_next_frame (fi);
157 gdb_assert (fi != NULL);
158 }
159
160 slot = htab_find_slot (cache_htab, &fi, NO_INSERT);
161 if (slot == NULL)
162 return NULL;
163
9a3c8263 164 cache = (struct tailcall_cache *) *slot;
e1b16eb4
JK
165 gdb_assert (cache != NULL);
166 return cache;
167}
168
169/* Number of virtual frames between THIS_FRAME and CACHE->NEXT_BOTTOM_FRAME.
170 If THIS_FRAME is CACHE-> NEXT_BOTTOM_FRAME return -1. */
171
172static int
173existing_next_levels (struct frame_info *this_frame,
174 struct tailcall_cache *cache)
175{
176 int retval = (frame_relative_level (this_frame)
177 - frame_relative_level (cache->next_bottom_frame) - 1);
178
179 gdb_assert (retval >= -1);
180
181 return retval;
182}
183
184/* The number of virtual tail call frames in CHAIN. With no virtual tail call
185 frames the function would return 0 (but CHAIN does not exist in such
186 case). */
187
188static int
189pretended_chain_levels (struct call_site_chain *chain)
190{
191 int chain_levels;
192
193 gdb_assert (chain != NULL);
194
195 if (chain->callers == chain->length && chain->callees == chain->length)
196 return chain->length;
197
198 chain_levels = chain->callers + chain->callees;
e0619de6 199 gdb_assert (chain_levels <= chain->length);
e1b16eb4
JK
200
201 return chain_levels;
202}
203
204/* Implementation of frame_this_id_ftype. THIS_CACHE must be already
205 initialized with tailcall_cache, THIS_FRAME must be a part of THIS_CACHE.
206
207 Specific virtual tail call frames are tracked by INLINE_DEPTH. */
208
209static void
210tailcall_frame_this_id (struct frame_info *this_frame, void **this_cache,
211 struct frame_id *this_id)
212{
9a3c8263 213 struct tailcall_cache *cache = (struct tailcall_cache *) *this_cache;
e1b16eb4
JK
214 struct frame_info *next_frame;
215
216 /* Tail call does not make sense for a sentinel frame. */
217 next_frame = get_next_frame (this_frame);
218 gdb_assert (next_frame != NULL);
219
220 *this_id = get_frame_id (next_frame);
221 (*this_id).code_addr = get_frame_pc (this_frame);
222 (*this_id).code_addr_p = 1;
193facb3
JK
223 (*this_id).artificial_depth = (cache->chain_levels
224 - existing_next_levels (this_frame, cache));
225 gdb_assert ((*this_id).artificial_depth > 0);
e1b16eb4
JK
226}
227
228/* Find PC to be unwound from THIS_FRAME. THIS_FRAME must be a part of
229 CACHE. */
230
231static CORE_ADDR
232pretend_pc (struct frame_info *this_frame, struct tailcall_cache *cache)
233{
234 int next_levels = existing_next_levels (this_frame, cache);
235 struct call_site_chain *chain = cache->chain;
e1b16eb4
JK
236
237 gdb_assert (chain != NULL);
238
239 next_levels++;
240 gdb_assert (next_levels >= 0);
241
242 if (next_levels < chain->callees)
243 return chain->call_site[chain->length - next_levels - 1]->pc;
244 next_levels -= chain->callees;
245
246 /* Otherwise CHAIN->CALLEES are already covered by CHAIN->CALLERS. */
247 if (chain->callees != chain->length)
248 {
249 if (next_levels < chain->callers)
250 return chain->call_site[chain->callers - next_levels - 1]->pc;
251 next_levels -= chain->callers;
252 }
253
254 gdb_assert (next_levels == 0);
255 return cache->prev_pc;
256}
257
258/* Implementation of frame_prev_register_ftype. If no specific register
259 override is supplied NULL is returned (this is incompatible with
260 frame_prev_register_ftype semantics). next_bottom_frame and tail call
261 frames unwind the NULL case differently. */
262
263struct value *
264dwarf2_tailcall_prev_register_first (struct frame_info *this_frame,
265 void **tailcall_cachep, int regnum)
266{
267 struct gdbarch *this_gdbarch = get_frame_arch (this_frame);
9a3c8263 268 struct tailcall_cache *cache = (struct tailcall_cache *) *tailcall_cachep;
e1b16eb4
JK
269 CORE_ADDR addr;
270
271 if (regnum == gdbarch_pc_regnum (this_gdbarch))
272 addr = pretend_pc (this_frame, cache);
273 else if (cache->prev_sp_p && regnum == gdbarch_sp_regnum (this_gdbarch))
274 {
275 int next_levels = existing_next_levels (this_frame, cache);
276
277 if (next_levels == cache->chain_levels - 1)
278 addr = cache->prev_sp;
279 else
13294f7d 280 addr = dwarf2_frame_cfa (this_frame) - cache->entry_cfa_sp_offset;
e1b16eb4
JK
281 }
282 else
283 return NULL;
284
285 return frame_unwind_got_address (this_frame, regnum, addr);
286}
287
288/* Implementation of frame_prev_register_ftype for tail call frames. Register
289 set of virtual tail call frames is assumed to be the one of the top (caller)
290 frame - assume unchanged register value for NULL from
291 dwarf2_tailcall_prev_register_first. */
292
293static struct value *
294tailcall_frame_prev_register (struct frame_info *this_frame,
295 void **this_cache, int regnum)
296{
9a3c8263 297 struct tailcall_cache *cache = (struct tailcall_cache *) *this_cache;
e1b16eb4
JK
298 struct value *val;
299
300 gdb_assert (this_frame != cache->next_bottom_frame);
301
302 val = dwarf2_tailcall_prev_register_first (this_frame, this_cache, regnum);
303 if (val)
304 return val;
305
306 return frame_unwind_got_register (this_frame, regnum, regnum);
307}
308
309/* Implementation of frame_sniffer_ftype. It will never find a new chain, use
310 dwarf2_tailcall_sniffer_first for the bottom (callee) frame. It will find
311 all the predecessing virtual tail call frames, it will return false when
312 there exist no more tail call frames in this chain. */
313
314static int
315tailcall_frame_sniffer (const struct frame_unwind *self,
316 struct frame_info *this_frame, void **this_cache)
317{
318 struct frame_info *next_frame;
319 int next_levels;
320 struct tailcall_cache *cache;
321
3c3bb058
AB
322 if (!dwarf2_frame_unwinders_enabled_p)
323 return 0;
324
e1b16eb4
JK
325 /* Inner tail call element does not make sense for a sentinel frame. */
326 next_frame = get_next_frame (this_frame);
327 if (next_frame == NULL)
328 return 0;
329
330 cache = cache_find (next_frame);
331 if (cache == NULL)
332 return 0;
333
334 cache_ref (cache);
335
336 next_levels = existing_next_levels (this_frame, cache);
337
338 /* NEXT_LEVELS is -1 only in dwarf2_tailcall_sniffer_first. */
339 gdb_assert (next_levels >= 0);
340 gdb_assert (next_levels <= cache->chain_levels);
341
342 if (next_levels == cache->chain_levels)
343 {
344 cache_unref (cache);
345 return 0;
346 }
347
348 *this_cache = cache;
349 return 1;
350}
351
352/* The initial "sniffer" whether THIS_FRAME is a bottom (callee) frame of a new
353 chain to create. Keep TAILCALL_CACHEP NULL if it did not find any chain,
354 initialize it otherwise. No tail call chain is created if there are no
355 unambiguous virtual tail call frames to report.
356
357 ENTRY_CFA_SP_OFFSETP is NULL if no special SP handling is possible,
358 otherwise *ENTRY_CFA_SP_OFFSETP is the number of bytes to subtract from tail
359 call frames frame base to get the SP value there - to simulate return
360 address pushed on the stack. */
361
362void
363dwarf2_tailcall_sniffer_first (struct frame_info *this_frame,
364 void **tailcall_cachep,
365 const LONGEST *entry_cfa_sp_offsetp)
366{
367 CORE_ADDR prev_pc = 0, prev_sp = 0; /* GCC warning. */
368 int prev_sp_p = 0;
22e048c9 369 CORE_ADDR this_pc;
e1b16eb4 370 struct gdbarch *prev_gdbarch;
8084e579 371 gdb::unique_xmalloc_ptr<call_site_chain> chain;
e1b16eb4 372 struct tailcall_cache *cache;
e1b16eb4
JK
373
374 gdb_assert (*tailcall_cachep == NULL);
375
05c56a9d
JK
376 /* PC may be after the function if THIS_FRAME calls noreturn function,
377 get_frame_address_in_block will decrease it by 1 in such case. */
378 this_pc = get_frame_address_in_block (this_frame);
e1b16eb4
JK
379
380 /* Catch any unwinding errors. */
a70b8144 381 try
e1b16eb4 382 {
13294f7d 383 int sp_regnum;
e1b16eb4
JK
384
385 prev_gdbarch = frame_unwind_arch (this_frame);
e1b16eb4 386
991a3e2e
LM
387 /* The dwarf2 tailcall sniffer runs early, at the end of populating the
388 dwarf2 frame cache for the current frame. If there exists inline
389 frames inner (next) to the current frame, there is a good possibility
390 of that inline frame not having a computed frame id yet.
391
392 This is because computing such a frame id requires us to walk through
393 the frame chain until we find the first normal frame after the inline
394 frame and then compute the normal frame's id first.
395
396 Some architectures' compilers generate enough register location
397 information for a dwarf unwinder to fetch PC without relying on inner
398 frames (x86_64 for example). In this case the PC is retrieved
399 according to dwarf rules.
400
401 But others generate less strict dwarf data for which assumptions are
402 made (like interpreting DWARF2_FRAME_REG_UNSPECIFIED as
403 DWARF2_FRAME_REG_SAME_VALUE). For such cases, GDB may attempt to
404 create lazy values for registers, and those lazy values must be
405 created with a valid frame id, but we potentially have no valid id.
406
407 So, to avoid breakage, if we see a dangerous situation with inline
408 frames without a computed id, use safer functions to retrieve the
409 current frame's PC. Otherwise use the provided dwarf rules. */
410 frame_info *next_frame = get_next_frame (this_frame);
411
e1b16eb4 412 /* Simulate frame_unwind_pc without setting this_frame->prev_pc.p. */
991a3e2e
LM
413 if (next_frame != nullptr && get_frame_type (next_frame) == INLINE_FRAME
414 && !frame_id_computed_p (next_frame))
415 {
416 /* The next frame is an inline frame and its frame id has not been
417 computed yet. */
418 get_frame_register (this_frame, gdbarch_pc_regnum (prev_gdbarch),
419 (gdb_byte *) &prev_pc);
420 prev_pc = gdbarch_addr_bits_remove (prev_gdbarch, prev_pc);
421 }
422 else
423 prev_pc = gdbarch_unwind_pc (prev_gdbarch, this_frame);
e1b16eb4
JK
424
425 /* call_site_find_chain can throw an exception. */
426 chain = call_site_find_chain (prev_gdbarch, prev_pc, this_pc);
427
9c6595ab
PA
428 if (entry_cfa_sp_offsetp != NULL)
429 {
430 sp_regnum = gdbarch_sp_regnum (prev_gdbarch);
431 if (sp_regnum != -1)
432 {
433 prev_sp = frame_unwind_register_unsigned (this_frame, sp_regnum);
434 prev_sp_p = 1;
435 }
436 }
e1b16eb4 437 }
230d2906 438 catch (const gdb_exception_error &except)
e1b16eb4
JK
439 {
440 if (entry_values_debug)
441 exception_print (gdb_stdout, except);
442 return;
443 }
444
445 /* Ambiguous unwind or unambiguous unwind verified as matching. */
446 if (chain == NULL || chain->length == 0)
8084e579 447 return;
e1b16eb4
JK
448
449 cache = cache_new_ref1 (this_frame);
450 *tailcall_cachep = cache;
8084e579 451 cache->chain = chain.release ();
e1b16eb4 452 cache->prev_pc = prev_pc;
8084e579 453 cache->chain_levels = pretended_chain_levels (cache->chain);
e1b16eb4
JK
454 cache->prev_sp_p = prev_sp_p;
455 if (cache->prev_sp_p)
456 {
457 cache->prev_sp = prev_sp;
458 cache->entry_cfa_sp_offset = *entry_cfa_sp_offsetp;
459 }
460 gdb_assert (cache->chain_levels > 0);
461}
462
463/* Implementation of frame_dealloc_cache_ftype. It can be called even for the
464 bottom chain frame from dwarf2_frame_dealloc_cache which is not a real
465 TAILCALL_FRAME. */
466
467static void
468tailcall_frame_dealloc_cache (struct frame_info *self, void *this_cache)
469{
9a3c8263 470 struct tailcall_cache *cache = (struct tailcall_cache *) this_cache;
e1b16eb4
JK
471
472 cache_unref (cache);
473}
474
475/* Implementation of frame_prev_arch_ftype. We assume all the virtual tail
476 call frames have gdbarch of the bottom (callee) frame. */
477
478static struct gdbarch *
479tailcall_frame_prev_arch (struct frame_info *this_frame,
480 void **this_prologue_cache)
481{
9a3c8263 482 struct tailcall_cache *cache = (struct tailcall_cache *) *this_prologue_cache;
e1b16eb4
JK
483
484 return get_frame_arch (cache->next_bottom_frame);
485}
486
487/* Virtual tail call frame unwinder if dwarf2_tailcall_sniffer_first finds
488 a chain to create. */
489
490const struct frame_unwind dwarf2_tailcall_frame_unwind =
491{
492 TAILCALL_FRAME,
493 default_frame_unwind_stop_reason,
494 tailcall_frame_this_id,
495 tailcall_frame_prev_register,
496 NULL,
497 tailcall_frame_sniffer,
498 tailcall_frame_dealloc_cache,
499 tailcall_frame_prev_arch
500};
501
6c265988 502void _initialize_tailcall_frame ();
e1b16eb4 503void
6c265988 504_initialize_tailcall_frame ()
e1b16eb4
JK
505{
506 cache_htab = htab_create_alloc (50, cache_hash, cache_eq, NULL, xcalloc,
507 xfree);
508}
This page took 0.682028 seconds and 4 git commands to generate.