summaryrefslogtreecommitdiff
path: root/devel/gdb66/files/patch-gdb_config_i386_tm-fbsd.h
diff options
context:
space:
mode:
Diffstat (limited to 'devel/gdb66/files/patch-gdb_config_i386_tm-fbsd.h')
-rw-r--r--devel/gdb66/files/patch-gdb_config_i386_tm-fbsd.h80
1 files changed, 80 insertions, 0 deletions
diff --git a/devel/gdb66/files/patch-gdb_config_i386_tm-fbsd.h b/devel/gdb66/files/patch-gdb_config_i386_tm-fbsd.h
new file mode 100644
index 000000000000..3013085bb6f7
--- /dev/null
+++ b/devel/gdb66/files/patch-gdb_config_i386_tm-fbsd.h
@@ -0,0 +1,80 @@
+--- gdb/config/i386/tm-fbsd.h Sat Jul 28 10:03:38 2001
++++ gdb/config/i386/tm-fbsd.h Mon Jun 3 10:08:22 2002
+@@ -24,6 +24,10 @@
+ #define HAVE_I387_REGS
+ #include "i386/tm-i386.h"
+
++#ifndef _SYS_PARAM_H_
++#include <sys/param.h>
++#endif
++
+ /* FreeBSD/ELF uses stabs-in-ELF with the DWARF register numbering
+ scheme by default, so we must redefine STAB_REG_TO_REGNUM. This
+ messes up the floating-point registers for a.out, but there is not
+@@ -41,38 +45,44 @@
+ /* Support for longjmp. */
+
+ /* Details about jmp_buf. It's supposed to be an array of integers. */
+-
+-#define JB_ELEMENT_SIZE 4 /* Size of elements in jmp_buf. */
+-#define JB_PC 0 /* Array index of saved PC. */
+-
+-/* Figure out where the longjmp will land. Store the address that
+- longjmp will jump to in *ADDR, and return non-zero if successful. */
+-
++#undef NUM_REGS
++#define NUM_REGS 16
+ #define GET_LONGJMP_TARGET(addr) get_longjmp_target (addr)
+-extern int get_longjmp_target (CORE_ADDR *addr);
+
+
+-/* Support for signal handlers. */
++/* On FreeBSD, sigtramp has size 0x18 and is immediately below the
++ ps_strings struct which has size 0x10 and is at the top of the
++ user stack. */
++
++#undef SIGTRAMP_START
++#undef SIGTRAMP_END
++#define SIGTRAMP_START(pc) 0xbfbfdfd8
++#define SIGTRAMP_END(pc) 0xbfbfdff0
+
+-#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
+- <sigtramp>.
+-
+- 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;
++extern CORE_ADDR fbsd_kern_frame_saved_pc(struct frame_info *fr);
+
+ /* 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);
++#if __FreeBSD_version >= 500032
++#define FRAME_SAVED_PC(FRAME) \
++ (kernel_debugging ? fbsd_kern_frame_saved_pc(FRAME) : \
++ (((FRAME)->signal_handler_caller \
++ ? sigtramp_saved_pc (FRAME) \
++ : read_memory_integer ((FRAME)->frame + 4, 4)) \
++ ))
++#else
++#define FRAME_SAVED_PC(FRAME) \
++ (((FRAME)->signal_handler_caller \
++ ? sigtramp_saved_pc (FRAME) \
++ : read_memory_integer ((FRAME)->frame + 4, 4)) \
++ )
++#endif
++
++/* Offset to saved PC in sigcontext, from <sys/signal.h>. */
++#define SIGCONTEXT_PC_OFFSET 20
+
+
+ /* Shared library support. */