From 67d1a7dc126d4241fda194f33b38dfd0cdcb837d Mon Sep 17 00:00:00 2001 From: nobody <> Date: Tue, 15 Jul 2003 12:34:09 +0000 Subject: [PATCH] This commit was manufactured by cvs2svn to create branch 'gdb_6_0-branch'. Cherrypick from master 2003-07-15 12:34:08 UTC Michal Ludvig 'Oops, forgot to add x86-64-linux-tdep.h in previous commit.': gdb/amd64fbsd-tdep.c gdb/config/i386/fbsd64.mh gdb/config/i386/fbsd64.mt gdb/config/i386/nm-fbsd64.h gdb/x86-64-linux-tdep.h --- gdb/amd64fbsd-tdep.c | 108 ++++++++++++++++++++++++++++++++++++ gdb/config/i386/fbsd64.mh | 7 +++ gdb/config/i386/fbsd64.mt | 2 + gdb/config/i386/nm-fbsd64.h | 42 ++++++++++++++ gdb/x86-64-linux-tdep.h | 39 +++++++++++++ 5 files changed, 198 insertions(+) create mode 100644 gdb/amd64fbsd-tdep.c create mode 100644 gdb/config/i386/fbsd64.mh create mode 100644 gdb/config/i386/fbsd64.mt create mode 100644 gdb/config/i386/nm-fbsd64.h create mode 100644 gdb/x86-64-linux-tdep.h diff --git a/gdb/amd64fbsd-tdep.c b/gdb/amd64fbsd-tdep.c new file mode 100644 index 00000000000..e72c14039eb --- /dev/null +++ b/gdb/amd64fbsd-tdep.c @@ -0,0 +1,108 @@ +/* Target-dependent code for FreeBSD/amd64. + Copyright 2003 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include "defs.h" +#include "arch-utils.h" +#include "frame.h" +#include "gdbcore.h" +#include "regcache.h" +#include "osabi.h" + +#include "gdb_string.h" + +#include "x86-64-tdep.h" + +/* Support for signal handlers. */ + +/* Assuming NEXT_FRAME is for a frame following a BSD sigtramp + routine, return the address of the associated sigcontext structure. */ + +static CORE_ADDR +amd64fbsd_sigcontext_addr (struct frame_info *next_frame) +{ + char buf[8]; + CORE_ADDR sp; + + frame_unwind_register (next_frame, X86_64_RSP_REGNUM, buf); + sp = extract_unsigned_integer (buf, 8); + + return read_memory_unsigned_integer (sp + 16, 8); +} + +/* FreeBSD 5.1-RELEASE or later. */ + +/* Location of the signal trampoline. */ +CORE_ADDR amd64fbsd_sigtramp_start = 0x7fffffffc0; +CORE_ADDR amd64fbsd_sigtramp_end = 0x7fffffffe0; + +/* From . */ +int amd64fbsd_sc_reg_offset[X86_64_NUM_GREGS] = +{ + 24 + 14 * 8, /* %rax */ + 24 + 11 * 8, /* %rbx */ + 24 + 13 * 8, /* %rcx */ + 24 + 12 * 8, /* %rdx */ + 24 + 9 * 8, /* %rsi */ + 24 + 8 * 8, /* %rdi */ + 24 + 10 * 8, /* %rbp */ + 24 + 20 * 8, /* %rsp */ + 24 + 7 * 8, /* %r8 */ + 24 + 6 * 8, /* %r9 */ + 24 + 5 * 8, /* %r10 */ + 24 + 4 * 8, /* %r11 */ + 24 + 3 * 8, /* %r12 */ + 24 + 2 * 8, /* %r13 */ + 24 + 1 * 8, /* %r14 */ + 24 + 0 * 8, /* %r15 */ + 24 + 17 * 8, /* %rip */ + 24 + 19 * 8, /* %eflags */ + -1, /* %ds */ + -1, /* %es */ + -1, /* %fs */ + -1 /* %gs */ +}; + +void +amd64fbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) +{ + struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); + + /* Obviously FreeBSD is BSD-based. */ + i386bsd_init_abi (info, gdbarch); + + x86_64_init_abi (info, gdbarch); + + tdep->sigtramp_start = amd64fbsd_sigtramp_start; + tdep->sigtramp_end = amd64fbsd_sigtramp_start; + tdep->sigcontext_addr = amd64fbsd_sigcontext_addr; + tdep->sc_reg_offset = amd64fbsd_sc_reg_offset; + tdep->sc_num_regs = X86_64_NUM_GREGS; +} + + +/* Provide a prototype to silence -Wmissing-prototypes. */ +void _initialize_amd64fbsd_tdep (void); + +void +_initialize_amd64fbsd_tdep (void) +{ + gdbarch_register_osabi (bfd_arch_i386, bfd_mach_x86_64, + GDB_OSABI_FREEBSD_ELF, amd64fbsd_init_abi); +} diff --git a/gdb/config/i386/fbsd64.mh b/gdb/config/i386/fbsd64.mh new file mode 100644 index 00000000000..a1a79a33499 --- /dev/null +++ b/gdb/config/i386/fbsd64.mh @@ -0,0 +1,7 @@ +# Host: FreeBSD/amd64 + +XM_FILE= xm-i386.h + +NAT_FILE= nm-fbsd64.h +# NOTE: Do not spread NATDEPFILES over several lines - it hurts BSD make. +NATDEPFILES= fork-child.o infptrace.o inftarg.o solib.o solib-svr4.o solib-legacy.o corelow.o core-regset.o amd64fbsd-nat.o gcore.o fbsd-proc.o diff --git a/gdb/config/i386/fbsd64.mt b/gdb/config/i386/fbsd64.mt new file mode 100644 index 00000000000..ae4fe989f07 --- /dev/null +++ b/gdb/config/i386/fbsd64.mt @@ -0,0 +1,2 @@ +# Target: FreeBSD/amd64 +TDEPFILES= x86-64-tdep.o amd64fbsd-tdep.o i386-tdep.o i387-tdep.o i386bsd-tdep.o diff --git a/gdb/config/i386/nm-fbsd64.h b/gdb/config/i386/nm-fbsd64.h new file mode 100644 index 00000000000..e5b66df15ed --- /dev/null +++ b/gdb/config/i386/nm-fbsd64.h @@ -0,0 +1,42 @@ +/* Native-dependent definitions for FreeBSD/amd64. + Copyright 2003 + Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#ifndef NM_FBSD64_H +#define NM_FBSD64_H + +/* Type of the third argument to the `ptrace' system call. */ +#define PTRACE_ARG3_TYPE caddr_t + +/* Override copies of {fetch,store}_inferior_registers in `infptrace.c'. */ +#define FETCH_INFERIOR_REGISTERS + +/* Override child_pid_to_exec_file in 'inftarg.c'. */ +#define CHILD_PID_TO_EXEC_FILE + +/* We can attach and detach. */ +#define ATTACH_DETACH + + +/* Shared library support. */ + +#include "solib.h" + +#endif /* nm-fbsd64.h */ diff --git a/gdb/x86-64-linux-tdep.h b/gdb/x86-64-linux-tdep.h new file mode 100644 index 00000000000..a135cfafb88 --- /dev/null +++ b/gdb/x86-64-linux-tdep.h @@ -0,0 +1,39 @@ +/* Target-dependent code for the x86-64. + + Copyright 2003 + Free Software Foundation, Inc. + + Contributed by Michal Ludvig, SuSE AG. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#ifndef X86_64_LINUX_TDEP_H +#define X86_64_LINUX_TDEP_H + +/* Fill GDB's register array with the general-purpose register values + in *GREGSETP. */ + +void x86_64_linux_supply_gregset (char *regp); + +/* Fill register REGNO (if it is a general-purpose register) in + *GREGSETPS with the value in GDB's register array. If REGNO is -1, + do this for all registers. */ + +void x86_64_linux_fill_gregset (char *regp, int regno); + +#endif /* x86-64-linux-tdep.h */ -- 2.47.2