projects
/
binutils-gdb.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
gas: Update commit 4780e5e4933
[binutils-gdb.git]
/
gdb
/
tramp-frame.c
diff --git
a/gdb/tramp-frame.c
b/gdb/tramp-frame.c
index c7b1d9f5c8eb5af1770c79ddc9f5952d3c1b30b9..b13ca51482221760bfa840abe097bca8b910d57e 100644
(file)
--- a/
gdb/tramp-frame.c
+++ b/
gdb/tramp-frame.c
@@
-1,7
+1,6
@@
/* Signal trampoline unwinder, for GDB the GNU Debugger.
/* Signal trampoline unwinder, for GDB the GNU Debugger.
- Copyright (C) 2004, 2007, 2008, 2009, 2010, 2011
- Free Software Foundation, Inc.
+ Copyright (C) 2004-2021 Free Software Foundation, Inc.
This file is part of GDB.
This file is part of GDB.
@@
-27,7
+26,6
@@
#include "target.h"
#include "trad-frame.h"
#include "frame-base.h"
#include "target.h"
#include "trad-frame.h"
#include "frame-base.h"
-#include "gdb_assert.h"
struct frame_data
{
struct frame_data
{
@@
-45,7
+43,8
@@
static struct trad_frame_cache *
tramp_frame_cache (struct frame_info *this_frame,
void **this_cache)
{
tramp_frame_cache (struct frame_info *this_frame,
void **this_cache)
{
- struct tramp_frame_cache *tramp_cache = (*this_cache);
+ struct tramp_frame_cache *tramp_cache
+ = (struct tramp_frame_cache *) *this_cache;
if (tramp_cache->trad_cache == NULL)
{
if (tramp_cache->trad_cache == NULL)
{
@@
-88,6
+87,10
@@
tramp_frame_start (const struct tramp_frame *tramp,
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
int ti;
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
int ti;
+ /* Check if we can use this trampoline. */
+ if (tramp->validate && !tramp->validate (tramp, this_frame, &pc))
+ return 0;
+
/* Search through the trampoline for one that matches the
instruction sequence around PC. */
for (ti = 0; tramp->insn[ti].bytes != TRAMP_SENTINEL_INSN; ti++)
/* Search through the trampoline for one that matches the
instruction sequence around PC. */
for (ti = 0; tramp->insn[ti].bytes != TRAMP_SENTINEL_INSN; ti++)
@@
-99,14
+102,15
@@
tramp_frame_start (const struct tramp_frame *tramp,
{
gdb_byte buf[sizeof (tramp->insn[0])];
ULONGEST insn;
{
gdb_byte buf[sizeof (tramp->insn[0])];
ULONGEST insn;
+ size_t insn_size = tramp->insn_size;
if (tramp->insn[i].bytes == TRAMP_SENTINEL_INSN)
return func;
if (!safe_frame_unwind_memory (this_frame,
if (tramp->insn[i].bytes == TRAMP_SENTINEL_INSN)
return func;
if (!safe_frame_unwind_memory (this_frame,
- func + i *
tramp->
insn_size,
-
buf, tramp->insn_size
))
+ func + i * insn_size,
+
{buf, insn_size}
))
break;
break;
- insn = extract_unsigned_integer (buf,
tramp->
insn_size, byte_order);
+ insn = extract_unsigned_integer (buf, insn_size, byte_order);
if (tramp->insn[i].bytes != (insn & tramp->insn[i].mask))
break;
}
if (tramp->insn[i].bytes != (insn & tramp->insn[i].mask))
break;
}