diff options
author | Jason Thorpe <thorpej@netbsd.org> | 2002-08-31 22:43:38 +0000 |
---|---|---|
committer | Jason Thorpe <thorpej@netbsd.org> | 2002-08-31 22:43:38 +0000 |
commit | 2ca8ae213fae4c0525535b7ecc9747764a5489d1 (patch) | |
tree | bf9f4a06f2a58cf67e6753254e10ad41e40047a8 /gdb/alphanbsd-tdep.c | |
parent | 3d9b49b09003d8b0cba6ca18d1b6240f984d3e8f (diff) | |
download | gdb-2ca8ae213fae4c0525535b7ecc9747764a5489d1.zip gdb-2ca8ae213fae4c0525535b7ecc9747764a5489d1.tar.gz gdb-2ca8ae213fae4c0525535b7ecc9747764a5489d1.tar.bz2 |
* 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.
Diffstat (limited to 'gdb/alphanbsd-tdep.c')
-rw-r--r-- | gdb/alphanbsd-tdep.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/gdb/alphanbsd-tdep.c b/gdb/alphanbsd-tdep.c index a3a1f53..bc7b1a4 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; |