aboutsummaryrefslogtreecommitdiff
path: root/gdb/i386nbsd-tdep.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/i386nbsd-tdep.c')
-rw-r--r--gdb/i386nbsd-tdep.c20
1 files changed, 13 insertions, 7 deletions
diff --git a/gdb/i386nbsd-tdep.c b/gdb/i386nbsd-tdep.c
index e1e05aa..53eb1c2 100644
--- a/gdb/i386nbsd-tdep.c
+++ b/gdb/i386nbsd-tdep.c
@@ -23,10 +23,12 @@
#include "defs.h"
#include "arch-utils.h"
+#include "frame.h"
#include "gdbcore.h"
#include "regcache.h"
#include "regset.h"
#include "osabi.h"
+#include "symtab.h"
#include "gdb_assert.h"
#include "gdb_string.h"
@@ -183,9 +185,16 @@ i386nbsd_sigtramp_offset (CORE_ADDR pc)
return -1;
}
+/* Return whether the frame preciding NEXT_FRAME corresponds to a
+ NetBSD sigtramp routine. */
+
static int
-i386nbsd_pc_in_sigtramp (CORE_ADDR pc, char *name)
+i386nbsd_sigtramp_p (struct frame_info *next_frame)
{
+ CORE_ADDR pc = frame_pc_unwind (next_frame);
+ char *name;
+
+ find_pc_partial_function (pc, &name, NULL, NULL);
return (nbsd_pc_in_sigtramp (pc, name)
|| i386nbsd_sigtramp_offset (pc) >= 0);
}
@@ -225,12 +234,9 @@ i386nbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
tdep->sizeof_gregset = 16 * 4;
/* NetBSD has different signal trampoline conventions. */
- set_gdbarch_deprecated_pc_in_sigtramp (gdbarch, i386nbsd_pc_in_sigtramp);
- /* FIXME: kettenis/20020906: We should probably provide
- NetBSD-specific versions of these functions if we want to
- recognize signal trampolines that live on the stack. */
- set_gdbarch_deprecated_sigtramp_start (gdbarch, NULL);
- set_gdbarch_deprecated_sigtramp_end (gdbarch, NULL);
+ tdep->sigtramp_start = 0;
+ tdep->sigtramp_end = 0;
+ tdep->sigtramp_p = i386nbsd_sigtramp_p;
/* NetBSD uses -freg-struct-return by default. */
tdep->struct_return = reg_struct_return;