From 2ca8ae213fae4c0525535b7ecc9747764a5489d1 Mon Sep 17 00:00:00 2001 From: Jason Thorpe Date: Sat, 31 Aug 2002 22:43:38 +0000 Subject: [PATCH] * Makefile.in (alphanbsd-tdep.o): Add $(frame_h) to dependency list. * alphanbsd-tdep.c (alphanbsd_sigcontext_addr) (alphanbsd_skip_sigtramp_frame): New functions. (alphanbsd_init_abi): Set tdep->skip_sigtramp_frame to alphanbsd_skip_sigtramp_frame. Set tdep->sigcontext_addr to alphanbsd_sigcontext_addr. --- gdb/ChangeLog | 10 ++++++++++ gdb/Makefile.in | 6 +++--- gdb/alphanbsd-tdep.c | 26 ++++++++++++++++++++++++++ 3 files changed, 39 insertions(+), 3 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index cbb735580e0..78b73c853da 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,13 @@ +2002-08-31 Jason Thorpe + + * Makefile.in (alphanbsd-tdep.o): Add $(frame_h) to dependency + list. + * alphanbsd-tdep.c (alphanbsd_sigcontext_addr) + (alphanbsd_skip_sigtramp_frame): New functions. + (alphanbsd_init_abi): Set tdep->skip_sigtramp_frame to + alphanbsd_skip_sigtramp_frame. Set tdep->sigcontext_addr + to alphanbsd_sigcontext_addr. + 2002-08-31 Jason Thorpe * Makefile.in (mipsnbsd-tdep.o): Add nbsd-tdep.h to dependency diff --git a/gdb/Makefile.in b/gdb/Makefile.in index 1c9a327eddd..55838c6b91e 100644 --- a/gdb/Makefile.in +++ b/gdb/Makefile.in @@ -1500,9 +1500,9 @@ alphabsd-nat.o: alphabsd-nat.c $(defs_h) $(inferior_h) $(regcache_h) \ alphabsd-tdep.o: alphabsd-tdep.c $(defs_h) $(regcache_h) $(alpha_tdep_h) \ $(alphabsd_tdep_h) alphafbsd-tdep.o: alphafbsd-tdep.c $(defs_h) $(value_h) $(alpha_tdep_h) -alphanbsd-tdep.o: alphanbsd-tdep.c $(defs_h) $(gdbcore_h) $(regcache_h) \ - $(value_h) $(solib_svr4_h) $(alpha_tdep_h) $(alphabsd_tdep_h) \ - $(nbsd_tdep_h) +alphanbsd-tdep.o: alphanbsd-tdep.c $(defs_h) $(gdbcore_h) $(frame_h) \ + $(regcache_h) $(value_h) $(solib_svr4_h) $(alpha_tdep_h) \ + $(alphabsd_tdep_h) $(nbsd_tdep_h) annotate.o: annotate.c $(defs_h) $(annotate_h) $(value_h) $(target_h) \ $(gdbtypes_h) $(breakpoint_h) # OBSOLETE arc-tdep.o: arc-tdep.c diff --git a/gdb/alphanbsd-tdep.c b/gdb/alphanbsd-tdep.c index a3a1f532a03..bc7b1a410db 100644 --- a/gdb/alphanbsd-tdep.c +++ b/gdb/alphanbsd-tdep.c @@ -21,6 +21,7 @@ #include "defs.h" #include "gdbcore.h" +#include "frame.h" #include "regcache.h" #include "value.h" @@ -182,6 +183,29 @@ alphanbsd_pc_in_sigtramp (CORE_ADDR pc, char *func_name) || alphanbsd_sigtramp_offset (pc) >= 0); } +static CORE_ADDR +alphanbsd_sigcontext_addr (struct frame_info *frame) +{ + /* FIXME: This is not correct for all versions of NetBSD/alpha. + We will probably need to disassemble the trampoline to figure + out which trampoline frame type we have. */ + return frame->frame; +} + +static CORE_ADDR +alphanbsd_skip_sigtramp_frame (struct frame_info *frame, CORE_ADDR pc) +{ + char *name; + + /* FIXME: This is not correct for all versions of NetBSD/alpha. + We will probably need to disassemble the trampoline to figure + out which trampoline frame type we have. */ + find_pc_partial_function (pc, &name, (CORE_ADDR *) NULL, (CORE_ADDR *) NULL); + if (PC_IN_SIGTRAMP (pc, name)) + return frame->frame; + return 0; +} + static void alphanbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) @@ -197,7 +221,9 @@ alphanbsd_init_abi (struct gdbarch_info info, set_solib_svr4_fetch_link_map_offsets (gdbarch, nbsd_lp64_solib_svr4_fetch_link_map_offsets); + tdep->skip_sigtramp_frame = alphanbsd_skip_sigtramp_frame; tdep->dynamic_sigtramp_offset = alphanbsd_sigtramp_offset; + tdep->sigcontext_addr = alphanbsd_sigcontext_addr; tdep->jb_pc = 2; tdep->jb_elt_size = 8; -- 2.30.2