diff options
Diffstat (limited to 'gdb/i386nbsd-tdep.c')
-rw-r--r-- | gdb/i386nbsd-tdep.c | 20 |
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; |