Index: acconfig.h =================================================================== RCS file: /cvs/src/src/gdb/acconfig.h,v retrieving revision 1.16 diff -c -r1.16 acconfig.h *** acconfig.h 2001/03/31 18:09:02 1.16 --- acconfig.h 2002/01/05 02:57:32 *************** *** 150,155 **** --- 150,158 ---- /* Define if defines the PT_GETDBREGS request. */ #undef HAVE_PT_GETDBREGS + /* Define if defines the PT_GETXMMREGS request. */ + #undef HAVE_PT_GETXMMREGS + /* Define if gnu-regex.c included with GDB should be used. */ #undef USE_INCLUDED_REGEX Index: configure.in =================================================================== RCS file: /cvs/src/src/gdb/configure.in,v retrieving revision 1.76 diff -c -r1.76 configure.in *** configure.in 2001/12/21 22:32:37 1.76 --- configure.in 2002/01/05 02:57:40 *************** *** 1,5 **** dnl Autoconf configure script for GDB, the GNU debugger. ! dnl Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001 dnl Free Software Foundation, Inc. dnl dnl This file is part of GDB. --- 1,5 ---- dnl Autoconf configure script for GDB, the GNU debugger. ! dnl Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 dnl Free Software Foundation, Inc. dnl dnl This file is part of GDB. *************** *** 215,220 **** --- 215,233 ---- AC_MSG_RESULT($gdb_cv_have_pt_getdbregs) if test $gdb_cv_have_pt_getdbregs = yes; then AC_DEFINE(HAVE_PT_GETDBREGS) + fi + + # See if provides the PT_GETXMMREGS request. + AC_MSG_CHECKING(for PT_GETXMMREGS) + AC_CACHE_VAL(gdb_cv_have_pt_getxmmregs, + [AC_TRY_COMPILE([#include + #include ], + [PT_GETXMMREGS;], + [gdb_cv_have_pt_getxmmregs=yes], + [gdb_cv_have_pt_getxmmregs=no])]) + AC_MSG_RESULT($gdb_cv_have_pt_getxmmregs) + if test $gdb_cv_have_pt_getxmmregs = yes; then + AC_DEFINE(HAVE_PT_GETXMMREGS) fi Index: i386bsd-nat.c =================================================================== RCS file: /cvs/src/src/gdb/i386bsd-nat.c,v retrieving revision 1.10 diff -c -r1.10 i386bsd-nat.c *** i386bsd-nat.c 2001/12/29 20:15:47 1.10 --- i386bsd-nat.c 2002/01/05 02:57:41 *************** *** 1,5 **** /* Native-dependent code for modern i386 BSD's. ! Copyright 2000, 2001 Free Software Foundation, Inc. This file is part of GDB. --- 1,5 ---- /* Native-dependent code for modern i386 BSD's. ! Copyright 2000, 2001, 2002 Free Software Foundation, Inc. This file is part of GDB. *************** *** 96,101 **** --- 96,111 ---- #define REG_ADDR(regset, regno) ((char *) (regset) + reg_offset[regno]) + /* Macro to determine if a register is fetched with PT_GETREGS. */ + #define GETREGS_SUPPLIES(regno) \ + ((0 <= (regno) && (regno) <= 15)) + + #ifdef HAVE_PT_GETXMMREGS + /* Set to 1 if the kernel supports PT_GETXMMREGS. Initialized to -1 + so that we try PT_GETXMMREGS the first time around. */ + static int have_ptrace_xmmregs = -1; + #endif + /* Return nonzero if we shouldn't try to fetch register REGNO. */ static int *************** *** 135,142 **** for (i = 0; i < NUM_GREGS; i++) if ((regno == -1 || regno == i) && ! CANNOT_STORE_REGISTER (i)) ! memcpy (REG_ADDR (gregsetp, i), ®isters[REGISTER_BYTE (i)], ! REGISTER_RAW_SIZE (i)); } #include "i387-nat.h" --- 145,151 ---- for (i = 0; i < NUM_GREGS; i++) if ((regno == -1 || regno == i) && ! CANNOT_STORE_REGISTER (i)) ! regcache_collect (i, REG_ADDR (gregsetp, i)); } #include "i387-nat.h" *************** *** 166,188 **** void fetch_inferior_registers (int regno) { - gregset_t gregs; ! if (ptrace (PT_GETREGS, PIDGET (inferior_ptid), ! (PTRACE_ARG3_TYPE) &gregs, 0) == -1) ! perror_with_name ("Couldn't get registers"); ! supply_gregset (&gregs); if (regno == -1 || regno >= FP0_REGNUM) { fpregset_t fpregs; if (ptrace (PT_GETFPREGS, PIDGET (inferior_ptid), (PTRACE_ARG3_TYPE) &fpregs, 0) == -1) perror_with_name ("Couldn't get floating point status"); supply_fpregset (&fpregs); } } --- 175,222 ---- void fetch_inferior_registers (int regno) { ! if (regno == -1 || GETREGS_SUPPLIES (regno)) ! { ! gregset_t gregs; ! if (ptrace (PT_GETREGS, PIDGET (inferior_ptid), ! (PTRACE_ARG3_TYPE) &gregs, 0) == -1) ! perror_with_name ("Couldn't get registers"); ! ! supply_gregset (&gregs); ! if (regno != -1) ! return; ! } if (regno == -1 || regno >= FP0_REGNUM) { fpregset_t fpregs; + #ifdef HAVE_PT_GETXMMREGS + char xmmregs[512]; + + if (have_ptrace_xmmregs != 0 && + ptrace(PT_GETXMMREGS, PIDGET (inferior_ptid), + (PTRACE_ARG3_TYPE) xmmregs, 0) == 0) + { + have_ptrace_xmmregs = 1; + i387_supply_fxsave (xmmregs); + } + else + { + if (ptrace (PT_GETFPREGS, PIDGET (inferior_ptid), + (PTRACE_ARG3_TYPE) &fpregs, 0) == -1) + perror_with_name ("Couldn't get floating point status"); + supply_fpregset (&fpregs); + } + #else if (ptrace (PT_GETFPREGS, PIDGET (inferior_ptid), (PTRACE_ARG3_TYPE) &fpregs, 0) == -1) perror_with_name ("Couldn't get floating point status"); supply_fpregset (&fpregs); + #endif } } *************** *** 192,222 **** void store_inferior_registers (int regno) { ! gregset_t gregs; ! if (ptrace (PT_GETREGS, PIDGET (inferior_ptid), ! (PTRACE_ARG3_TYPE) &gregs, 0) == -1) ! perror_with_name ("Couldn't get registers"); ! fill_gregset (&gregs, regno); ! if (ptrace (PT_SETREGS, PIDGET (inferior_ptid), ! (PTRACE_ARG3_TYPE) &gregs, 0) == -1) ! perror_with_name ("Couldn't write registers"); if (regno == -1 || regno >= FP0_REGNUM) { fpregset_t fpregs; ! if (ptrace (PT_GETFPREGS, PIDGET (inferior_ptid), ! (PTRACE_ARG3_TYPE) &fpregs, 0) == -1) ! perror_with_name ("Couldn't get floating point status"); ! fill_fpregset (&fpregs, regno); ! if (ptrace (PT_SETFPREGS, PIDGET (inferior_ptid), ! (PTRACE_ARG3_TYPE) &fpregs, 0) == -1) ! perror_with_name ("Couldn't write floating point status"); } } --- 226,284 ---- void store_inferior_registers (int regno) { ! ! if (regno == -1 || GETREGS_SUPPLIES (regno)) ! { ! gregset_t gregs; ! if (ptrace (PT_GETREGS, PIDGET (inferior_ptid), ! (PTRACE_ARG3_TYPE) &gregs, 0) == -1) ! perror_with_name ("Couldn't get registers"); ! fill_gregset (&gregs, regno); ! if (ptrace (PT_SETREGS, PIDGET (inferior_ptid), ! (PTRACE_ARG3_TYPE) &gregs, 0) == -1) ! perror_with_name ("Couldn't write registers"); + if (regno != -1) + return; + } + if (regno == -1 || regno >= FP0_REGNUM) { fpregset_t fpregs; + #ifdef HAVE_PT_GETXMMREGS + char xmmregs[512]; ! if (have_ptrace_xmmregs != 0 && ! ptrace(PT_GETXMMREGS, PIDGET (inferior_ptid), ! (PTRACE_ARG3_TYPE) xmmregs, 0) == 0) ! { ! have_ptrace_xmmregs = 1; ! ! i387_fill_fxsave (xmmregs, regno); ! ! if (ptrace (PT_SETXMMREGS, PIDGET (inferior_ptid), ! (PTRACE_ARG3_TYPE) xmmregs, 0) == -1) ! perror_with_name ("Couldn't write XMM registers"); ! } ! else ! { ! have_ptrace_xmmregs = 0; ! #endif ! if (ptrace (PT_GETFPREGS, PIDGET (inferior_ptid), ! (PTRACE_ARG3_TYPE) &fpregs, 0) == -1) ! perror_with_name ("Couldn't get floating point status"); ! fill_fpregset (&fpregs, regno); ! if (ptrace (PT_SETFPREGS, PIDGET (inferior_ptid), ! (PTRACE_ARG3_TYPE) &fpregs, 0) == -1) ! perror_with_name ("Couldn't write floating point status"); ! #ifdef HAVE_PT_GETXMMREGS ! } ! #endif } } Index: i386nbsd-nat.c =================================================================== RCS file: /cvs/src/src/gdb/i386nbsd-nat.c,v retrieving revision 1.9 diff -c -r1.9 i386nbsd-nat.c *** i386nbsd-nat.c 2002/01/04 22:43:31 1.9 --- i386nbsd-nat.c 2002/01/05 02:57:41 *************** *** 25,160 **** #include #include #include "inferior.h" ! #include "gdbcore.h" /* for registers_fetched() */ #include "regcache.h" ! /* Defines for XMM0_REGNUM etc. */ ! #include "i386-tdep.h" ! #define RF(dst, src) \ ! memcpy(®isters[REGISTER_BYTE(dst)], &src, sizeof(src)) ! #define RS(src, dst) \ ! memcpy(&dst, ®isters[REGISTER_BYTE(src)], sizeof(dst)) ! ! struct env387 ! { ! unsigned short control; ! unsigned short r0; ! unsigned short status; ! unsigned short r1; ! unsigned short tag; ! unsigned short r2; ! unsigned long eip; ! unsigned short code_seg; ! unsigned short opcode; ! unsigned long operand; ! unsigned short operand_seg; ! unsigned short r3; ! unsigned char regs[8][10]; ! }; - void - fetch_inferior_registers (int regno) - { - struct reg inferior_registers; - struct env387 inferior_fpregisters; - - ptrace (PT_GETREGS, PIDGET (inferior_ptid), - (PTRACE_ARG3_TYPE) &inferior_registers, 0); - ptrace (PT_GETFPREGS, PIDGET (inferior_ptid), - (PTRACE_ARG3_TYPE) &inferior_fpregisters, 0); - - RF ( 0, inferior_registers.r_eax); - RF ( 1, inferior_registers.r_ecx); - RF ( 2, inferior_registers.r_edx); - RF ( 3, inferior_registers.r_ebx); - RF ( 4, inferior_registers.r_esp); - RF ( 5, inferior_registers.r_ebp); - RF ( 6, inferior_registers.r_esi); - RF ( 7, inferior_registers.r_edi); - RF ( 8, inferior_registers.r_eip); - RF ( 9, inferior_registers.r_eflags); - RF (10, inferior_registers.r_cs); - RF (11, inferior_registers.r_ss); - RF (12, inferior_registers.r_ds); - RF (13, inferior_registers.r_es); - RF (14, inferior_registers.r_fs); - RF (15, inferior_registers.r_gs); - - RF (FP0_REGNUM, inferior_fpregisters.regs[0]); - RF (FP0_REGNUM + 1, inferior_fpregisters.regs[1]); - RF (FP0_REGNUM + 2, inferior_fpregisters.regs[2]); - RF (FP0_REGNUM + 3, inferior_fpregisters.regs[3]); - RF (FP0_REGNUM + 4, inferior_fpregisters.regs[4]); - RF (FP0_REGNUM + 5, inferior_fpregisters.regs[5]); - RF (FP0_REGNUM + 6, inferior_fpregisters.regs[6]); - RF (FP0_REGNUM + 7, inferior_fpregisters.regs[7]); - - RF (FCTRL_REGNUM, inferior_fpregisters.control); - RF (FSTAT_REGNUM, inferior_fpregisters.status); - RF (FTAG_REGNUM, inferior_fpregisters.tag); - RF (FCS_REGNUM, inferior_fpregisters.code_seg); - RF (FCOFF_REGNUM, inferior_fpregisters.eip); - RF (FDS_REGNUM, inferior_fpregisters.operand_seg); - RF (FDOFF_REGNUM, inferior_fpregisters.operand); - RF (FOP_REGNUM, inferior_fpregisters.opcode); - - registers_fetched (); - } - - void - store_inferior_registers (int regno) - { - struct reg inferior_registers; - struct env387 inferior_fpregisters; - - RS ( 0, inferior_registers.r_eax); - RS ( 1, inferior_registers.r_ecx); - RS ( 2, inferior_registers.r_edx); - RS ( 3, inferior_registers.r_ebx); - RS ( 4, inferior_registers.r_esp); - RS ( 5, inferior_registers.r_ebp); - RS ( 6, inferior_registers.r_esi); - RS ( 7, inferior_registers.r_edi); - RS ( 8, inferior_registers.r_eip); - RS ( 9, inferior_registers.r_eflags); - RS (10, inferior_registers.r_cs); - RS (11, inferior_registers.r_ss); - RS (12, inferior_registers.r_ds); - RS (13, inferior_registers.r_es); - RS (14, inferior_registers.r_fs); - RS (15, inferior_registers.r_gs); - - - RS (FP0_REGNUM, inferior_fpregisters.regs[0]); - RS (FP0_REGNUM + 1, inferior_fpregisters.regs[1]); - RS (FP0_REGNUM + 2, inferior_fpregisters.regs[2]); - RS (FP0_REGNUM + 3, inferior_fpregisters.regs[3]); - RS (FP0_REGNUM + 4, inferior_fpregisters.regs[4]); - RS (FP0_REGNUM + 5, inferior_fpregisters.regs[5]); - RS (FP0_REGNUM + 6, inferior_fpregisters.regs[6]); - RS (FP0_REGNUM + 7, inferior_fpregisters.regs[7]); - - RS (FCTRL_REGNUM, inferior_fpregisters.control); - RS (FSTAT_REGNUM, inferior_fpregisters.status); - RS (FTAG_REGNUM, inferior_fpregisters.tag); - RS (FCS_REGNUM, inferior_fpregisters.code_seg); - RS (FCOFF_REGNUM, inferior_fpregisters.eip); - RS (FDS_REGNUM, inferior_fpregisters.operand_seg); - RS (FDOFF_REGNUM, inferior_fpregisters.operand); - RS (FOP_REGNUM, inferior_fpregisters.opcode); - - ptrace (PT_SETREGS, PIDGET (inferior_ptid), - (PTRACE_ARG3_TYPE) &inferior_registers, 0); - ptrace (PT_SETFPREGS, PIDGET (inferior_ptid), - (PTRACE_ARG3_TYPE) &inferior_fpregisters, 0); - } - struct md_core { struct reg intreg; ! struct env387 freg; }; static void --- 25,50 ---- #include #include #include "inferior.h" ! #include "gdbcore.h" #include "regcache.h" ! #ifndef HAVE_GREGSET_T ! typedef struct reg gregset_t; ! #endif ! ! #ifndef HAVE_FPREGSET_T ! typedef struct fpreg fpregset_t; ! #endif ! #include "gregset.h" ! /* Prototypes for i387_supply_fsave etc. */ ! #include "i387-nat.h" struct md_core { struct reg intreg; ! char freg[108]; }; static void *************** *** 162,194 **** CORE_ADDR ignore) { struct md_core *core_reg = (struct md_core *) core_reg_sect; ! /* integer registers */ ! memcpy (®isters[REGISTER_BYTE (0)], &core_reg->intreg, ! sizeof (struct reg)); ! ! /* floating point registers */ ! RF (FP0_REGNUM, core_reg->freg.regs[0]); ! RF (FP0_REGNUM + 1, core_reg->freg.regs[1]); ! RF (FP0_REGNUM + 2, core_reg->freg.regs[2]); ! RF (FP0_REGNUM + 3, core_reg->freg.regs[3]); ! RF (FP0_REGNUM + 4, core_reg->freg.regs[4]); ! RF (FP0_REGNUM + 5, core_reg->freg.regs[5]); ! RF (FP0_REGNUM + 6, core_reg->freg.regs[6]); ! RF (FP0_REGNUM + 7, core_reg->freg.regs[7]); ! ! RF (FCTRL_REGNUM, core_reg->freg.control); ! RF (FSTAT_REGNUM, core_reg->freg.status); ! RF (FTAG_REGNUM, core_reg->freg.tag); ! RF (FCS_REGNUM, core_reg->freg.code_seg); ! RF (FCOFF_REGNUM, core_reg->freg.eip); ! RF (FDS_REGNUM, core_reg->freg.operand_seg); ! RF (FDOFF_REGNUM, core_reg->freg.operand); ! RF (FOP_REGNUM, core_reg->freg.opcode); ! registers_fetched (); } /* Register that we are able to handle i386nbsd core file formats. FIXME: is this really bfd_target_unknown_flavour? */ --- 52,108 ---- CORE_ADDR ignore) { struct md_core *core_reg = (struct md_core *) core_reg_sect; + + /* We get everything from one section. */ + if (which != 0) + return; ! /* Integer registers. */ ! supply_gregset (&core_reg->intreg); ! /* Floating point registers. */ ! i387_supply_fsave (core_reg->freg); } + static void + fetch_elfcore_registers (char *core_reg_sect, unsigned core_reg_size, int which, + CORE_ADDR ignore) + { + gregset_t gregset; + + switch (which) + { + case 0: /* Integer registers. */ + if (core_reg_size != sizeof (struct reg)) + warning ("Wrong size register set in core file."); + else + { + memcpy (&gregset, core_reg_sect, sizeof (gregset)); + supply_gregset (&gregset); + } + break; + + case 2: /* Floating point registers. */ + if (core_reg_size != 108) + warning ("Wrong size FP register set in core file."); + else + i387_supply_fsave (core_reg_sect); + break; + + case 3: /* "Extended" floating point registers. This is gdb-speak + for SSE/SSE2. */ + if (core_reg_size != 512) + warning ("Wrong size XMM register set in core file."); + else + i387_supply_fxsave (core_reg_sect); + break; + + default: + /* Don't know what kind of register request this is; just ignore it. */ + break; + } + } + /* Register that we are able to handle i386nbsd core file formats. FIXME: is this really bfd_target_unknown_flavour? */ *************** *** 201,208 **** --- 115,132 ---- NULL /* next */ }; + static struct core_fns i386nbsd_elfcore_fns = + { + bfd_target_elf_flavour, /* core_flavour */ + default_check_format, /* check_format */ + default_core_sniffer, /* core_sniffer */ + fetch_elfcore_registers, /* core_read_registers */ + NULL /* next */ + }; + void _initialize_i386nbsd_nat (void) { add_core_fns (&i386nbsd_core_fns); + add_core_fns (&i386nbsd_elfcore_fns); } Index: config/i386/nbsd.mh =================================================================== RCS file: /cvs/src/src/gdb/config/i386/nbsd.mh,v retrieving revision 1.10 diff -c -r1.10 nbsd.mh *** nbsd.mh 2001/10/02 23:11:21 1.10 --- nbsd.mh 2002/01/05 02:57:41 *************** *** 7,13 **** # continuation character (backslash) to extend a commented line. As a # consequence, BSD make considers subsequent tab-indented lines to be # "unassociated shell commands". ! NATDEPFILES= fork-child.o infptrace.o inftarg.o corelow.o i386nbsd-nat.o solib.o solib-sunos.o XM_FILE= xm-nbsd.h NAT_FILE= nm-nbsd.h --- 7,13 ---- # continuation character (backslash) to extend a commented line. As a # consequence, BSD make considers subsequent tab-indented lines to be # "unassociated shell commands". ! NATDEPFILES= fork-child.o infptrace.o inftarg.o corelow.o i387-nat.o i386bsd-nat.o i386nbsd-nat.o solib.o solib-sunos.o XM_FILE= xm-nbsd.h NAT_FILE= nm-nbsd.h Index: config/i386/nbsd.mt =================================================================== RCS file: /cvs/src/src/gdb/config/i386/nbsd.mt,v retrieving revision 1.6 diff -c -r1.6 nbsd.mt *** nbsd.mt 2001/01/22 20:23:16 1.6 --- nbsd.mt 2002/01/05 02:57:42 *************** *** 1,5 **** # Target: Intel 386 running NetBSD ! TDEPFILES= i386-tdep.o i387-tdep.o i386nbsd-tdep.o TM_FILE= tm-nbsd.h GDBSERVER_DEPFILES= low-nbsd.o --- 1,5 ---- # Target: Intel 386 running NetBSD ! TDEPFILES= i386-tdep.o i387-tdep.o i386bsd-tdep.o i386nbsd-tdep.o TM_FILE= tm-nbsd.h GDBSERVER_DEPFILES= low-nbsd.o Index: config/i386/nbsdelf.mh =================================================================== RCS file: /cvs/src/src/gdb/config/i386/nbsdelf.mh,v retrieving revision 1.6 diff -c -r1.6 nbsdelf.mh *** nbsdelf.mh 2001/03/10 06:17:21 1.6 --- nbsdelf.mh 2002/01/05 02:57:42 *************** *** 1,5 **** # Host: Intel 386 running NetBSD XDEPFILES= ! NATDEPFILES= fork-child.o infptrace.o inftarg.o corelow.o i386nbsd-nat.o solib.o solib-svr4.o solib-legacy.o XM_FILE= xm-nbsd.h NAT_FILE= nm-nbsdelf.h --- 1,5 ---- # Host: Intel 386 running NetBSD XDEPFILES= ! NATDEPFILES= fork-child.o infptrace.o inftarg.o corelow.o i387-nat.o i386bsd-nat.o i386nbsd-nat.o solib.o solib-svr4.o solib-legacy.o XM_FILE= xm-nbsd.h NAT_FILE= nm-nbsdelf.h Index: config/i386/nbsdelf.mt =================================================================== RCS file: /cvs/src/src/gdb/config/i386/nbsdelf.mt,v retrieving revision 1.3 diff -c -r1.3 nbsdelf.mt *** nbsdelf.mt 2001/01/22 20:23:16 1.3 --- nbsdelf.mt 2002/01/05 02:57:42 *************** *** 1,5 **** # Target: Intel 386 running NetBSD ! TDEPFILES= i386-tdep.o i387-tdep.o TM_FILE= tm-nbsdelf.h GDBSERVER_DEPFILES= low-nbsd.o --- 1,5 ---- # Target: Intel 386 running NetBSD ! TDEPFILES= i386-tdep.o i387-tdep.o i386bsd-tdep.o TM_FILE= tm-nbsdelf.h GDBSERVER_DEPFILES= low-nbsd.o Index: config/i386/tm-nbsd.h =================================================================== RCS file: /cvs/src/src/gdb/config/i386/tm-nbsd.h,v retrieving revision 1.7 diff -c -r1.7 tm-nbsd.h *** tm-nbsd.h 2001/03/06 08:21:29 1.7 --- tm-nbsd.h 2002/01/05 02:57:42 *************** *** 1,5 **** /* Macro definitions for i386 running under NetBSD. ! Copyright 1994, 1996, 2000 Free Software Foundation, Inc. This file is part of GDB. --- 1,5 ---- /* Macro definitions for i386 running under NetBSD. ! Copyright 1994, 1996, 2000, 2002 Free Software Foundation, Inc. This file is part of GDB. *************** *** 22,27 **** --- 22,28 ---- #define TM_NBSD_H #define HAVE_I387_REGS + #define HAVE_SSE_REGS #include "i386/tm-i386.h" #include "config/tm-nbsd.h" *************** *** 46,58 **** /* Support for signal handlers. */ ! /* The sigtramp is above the user stack and immediately below the ! user area. Using constants here allows for cross debugging. */ ! #define SIGTRAMP_START(pc) 0xbfbfdf20 ! #define SIGTRAMP_END(pc) 0xbfbfdff0 ! /* Offset to saved PC in sigcontext, from . */ ! #define SIGCONTEXT_PC_OFFSET 20 #endif /* TM_NBSD_H */ --- 47,70 ---- /* Support for signal handlers. */ ! #define IN_SIGTRAMP(pc, name) i386bsd_in_sigtramp (pc, name) ! extern int i386bsd_in_sigtramp (CORE_ADDR pc, char *name); ! /* These defines allow the recognition of sigtramps as a function name ! . ! FIXME: kettenis/2001-07-13: These should be added to the target ! vector and turned into functions when we go "multi-arch". */ ! ! #define SIGTRAMP_START(pc) i386bsd_sigtramp_start ! #define SIGTRAMP_END(pc) i386bsd_sigtramp_end ! extern CORE_ADDR i386bsd_sigtramp_start; ! extern CORE_ADDR i386bsd_sigtramp_end; ! ! /* Override FRAME_SAVED_PC to enable the recognition of signal handlers. */ ! ! #undef FRAME_SAVED_PC ! #define FRAME_SAVED_PC(frame) i386bsd_frame_saved_pc (frame) ! extern CORE_ADDR i386bsd_frame_saved_pc (struct frame_info *frame); #endif /* TM_NBSD_H */