summaryrefslogtreecommitdiff
path: root/gnu
diff options
context:
space:
mode:
authorcvs2svn <cvs2svn@FreeBSD.org>1999-05-08 01:59:28 +0000
committercvs2svn <cvs2svn@FreeBSD.org>1999-05-08 01:59:28 +0000
commite2b3ce7fb6e9d030e8d7fd9a88fd5280fde2dde3 (patch)
tree9559f70827fbfaf8d402d161a69e2209728406dc /gnu
parentabf5dbcd9af68486d844ee62d43daacec6b189e0 (diff)
Notes
Diffstat (limited to 'gnu')
-rw-r--r--gnu/usr.bin/binutils/gdb/Makefile110
-rw-r--r--gnu/usr.bin/binutils/gdb/alpha/freebsd-nat.c146
2 files changed, 256 insertions, 0 deletions
diff --git a/gnu/usr.bin/binutils/gdb/Makefile b/gnu/usr.bin/binutils/gdb/Makefile
new file mode 100644
index 000000000000..9316ba81f127
--- /dev/null
+++ b/gnu/usr.bin/binutils/gdb/Makefile
@@ -0,0 +1,110 @@
+#
+# $Id: Makefile,v 1.40 1999/05/02 11:31:54 dfr Exp $
+#
+
+.include "../Makefile.inc0"
+
+.PATH: ${SRCDIR}/binutils
+
+PROG= nm
+PROG = gdb
+XSRCS = annotate.c ax-general.c ax-gdb.c bcache.c blockframe.c \
+ breakpoint.c buildsym.c c-exp.y c-lang.c c-typeprint.c \
+ c-valprint.c ch-exp.c ch-lang.c ch-typeprint.c ch-valprint.c \
+ coffread.c command.c complaints.c copying.c corefile.c \
+ corelow.c core-regset.c cp-valprint.c dcache.c dbxread.c demangle.c \
+ dwarfread.c dwarf2read.c elfread.c environ.c eval.c exec.c \
+ expprint.c f-exp.y f-lang.c f-typeprint.c f-valprint.c \
+ findvar.c fork-child.c gdbarch.c gdbtypes.c infcmd.c inflow.c \
+ infptrace.c infrun.c inftarg.c language.c jv-exp.y jv-lang.c \
+ jv-valprint.c jv-typeprint.c nlmread.c m2-lang.c m2-exp.y \
+ m2-typeprint.c m2-valprint.c main.c maint.c mdebugread.c \
+ mem-break.c minsyms.c objfiles.c parse.c printcmd.c remote.c \
+ remote-utils.c scm-exp.c scm-lang.c scm-valprint.c solib.c \
+ source.c stabsread.c stack.c symfile.c symmisc.c symtab.c \
+ target.c thread.c top.c tracepoint.c typeprint.c utils.c \
+ valarith.c valops.c valprint.c values.c version.c serial.c \
+ ser-unix.c ser-tcp.c callback.c
+SRCS= init.c ${XSRCS}
+
+.if exists(${.CURDIR}/Makefile.${MACHINE_ARCH})
+.include "${.CURDIR}/Makefile.${MACHINE_ARCH}"
+.endif
+
+#CFLAGS+= -I${.CURDIR}/${RELTOP}/libbinutils
+CFLAGS+= -I${.CURDIR}/${MACHINE_ARCH}
+CFLAGS+= -I${SRCDIR}/binutils
+CFLAGS+= -I${SRCDIR}/bfd
+CFLAGS+= -I${GDBDIR}/gdb
+CFLAGS+= -I${GDBDIR}/gdb/config
+LDADD+= -L${RELTOP}/libbfd -lbfd
+LDADD+= -L${RELTOP}/libopcodes -lopcodes
+LDADD+= -lreadline
+LDADD+= -lgnuregex
+LDADD+= -L${RELTOP}/libiberty -liberty
+LDADD+= -ltermcap
+DPADD+= ${RELTOP}/libbfd/libbfd.a
+DPADD+= ${RELTOP}/libopcodes/libopcodes.a
+DPADD+= ${LIBREADLINE}
+DPADD+= ${LIBGNUREGEX}
+DPADD+= ${RELTOP}/libiberty/libiberty.a
+DPADD+= ${LIBTERMCAP}
+
+GDBDIR= ${.CURDIR}/../../../../contrib/gdb
+.PATH: ${GDBDIR}/gdb
+.PATH: ${SRCDIR}/opcodes
+
+CFLAGS+= -DFREEBSD_ELF
+
+CFLAGS+= -I$(.CURDIR) -I${DESTDIR}/usr/include/readline
+# use phkmalloc
+CFLAGS+= -DNO_MMALLOC
+# uncomment the next line if you want to debug gdb
+#CFLAGS+= -g
+YFLAGS=
+
+CLEANFILES= init.c init.c-tmp
+
+# We do this by grepping through sources. If that turns out to be too slow,
+# maybe we could just require every .o file to have an initialization routine
+# of a given name (remote-udi.o -> _initialize_remote_udi, etc.).
+#
+# Formatting conventions: The name of the _initialize_* routines must start
+# in column zero, and must not be inside #if.
+#
+# Note that the set of files with init functions might change, or the names
+# of the functions might change, so this files needs to depend on all the
+# object files that will be linked into gdb.
+
+init.c: ${XSRCS}
+ @echo Making ${.TARGET}
+ @rm -f init.c-tmp
+ @echo '/* Do not modify this file. */' >init.c-tmp
+ @echo '/* It is created automatically by the Makefile. */'>>init.c-tmp
+ @echo 'void initialize_all_files () {' >>init.c-tmp
+ @for i in ${.ALLSRC} ; do \
+ filename=`echo $$i | sed \
+ -e '/^Onindy.c/d' \
+ -e '/^nindy.c/d' \
+ -e '/ttyflush.c/d' \
+ -e '/xdr_ld.c/d' \
+ -e '/xdr_ptrace.c/d' \
+ -e '/xdr_rdb.c/d' \
+ -e '/udr.c/d' \
+ -e '/udip2soc.c/d' \
+ -e '/udi2go32.c/d' \
+ -e '/version.c/d' \
+ -e '/^[a-z0-9A-Z_]*_[SU].c/d' \
+ -e '/[a-z0-9A-Z_]*-exp.tab.c/d'` ; \
+ case $$filename in \
+ "") ;; \
+ *) sed <$$filename >>init.c-tmp -n \
+ -e '/^_initialize_[a-z_0-9A-Z]* *(/s/^\([a-z_0-9A-Z]*\).*/ {extern void \1 (); \1 ();}/p' ; ;; \
+ esac ; \
+ done
+ @echo '}' >>init.c-tmp
+ @mv init.c-tmp ${.TARGET}
+
+.PRECIOUS: init.c
+
+.include <bsd.prog.mk>
diff --git a/gnu/usr.bin/binutils/gdb/alpha/freebsd-nat.c b/gnu/usr.bin/binutils/gdb/alpha/freebsd-nat.c
new file mode 100644
index 000000000000..1bc87903869b
--- /dev/null
+++ b/gnu/usr.bin/binutils/gdb/alpha/freebsd-nat.c
@@ -0,0 +1,146 @@
+/* Native-dependent code for BSD Unix running on i386's, for GDB.
+ Copyright 1988, 1989, 1991, 1992, 1994, 1996 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 <sys/types.h>
+#include <sys/ptrace.h>
+#include <machine/reg.h>
+#include <machine/frame.h>
+#include <sys/param.h>
+#include <sys/user.h>
+#include <string.h>
+#include "gdbcore.h"
+#include "value.h"
+#include "inferior.h"
+
+#if defined(HAVE_GREGSET_T)
+#include <sys/procfs.h>
+#endif
+
+int kernel_debugging = 0;
+
+/* Size of elements in jmpbuf */
+
+#define JB_ELEMENT_SIZE 8
+
+/* The definition for JB_PC in machine/reg.h is wrong.
+ And we can't get at the correct definition in setjmp.h as it is
+ not always available (eg. if _POSIX_SOURCE is defined which is the
+ default). As the defintion is unlikely to change (see comment
+ in <setjmp.h>, define the correct value here. */
+
+#undef JB_PC
+#define JB_PC 2
+
+/* Figure out where the longjmp will land.
+ We expect the first arg to be a pointer to the jmp_buf structure from which
+ we extract the pc (JB_PC) that we will land at. The pc is copied into PC.
+ This routine returns true on success. */
+
+int
+get_longjmp_target (pc)
+ CORE_ADDR *pc;
+{
+ CORE_ADDR jb_addr;
+ char raw_buffer[MAX_REGISTER_RAW_SIZE];
+
+ jb_addr = read_register(A0_REGNUM);
+
+ if (target_read_memory(jb_addr + JB_PC * JB_ELEMENT_SIZE, raw_buffer,
+ sizeof(CORE_ADDR)))
+ return 0;
+
+ *pc = extract_address (raw_buffer, sizeof(CORE_ADDR));
+ return 1;
+}
+
+void
+fetch_inferior_registers (regno)
+ int regno;
+{
+ struct reg regs; /* ptrace order, not gcc/gdb order */
+ struct fpreg fpregs;
+ int r;
+
+ ptrace (PT_GETREGS, inferior_pid, (PTRACE_ARG3_TYPE) &regs, 0);
+ ptrace (PT_GETFPREGS, inferior_pid, (PTRACE_ARG3_TYPE) &fpregs, 0);
+
+ for (r = 0; r < 31; r++)
+ memcpy (&registers[REGISTER_BYTE (r)],
+ &regs.r_regs[r], sizeof(u_int64_t));
+ for (r = 0; r < 32; r++)
+ memcpy (&registers[REGISTER_BYTE (r + FP0_REGNUM)],
+ &fpregs.fpr_regs[r], sizeof(u_int64_t));
+ memcpy (&registers[REGISTER_BYTE (PC_REGNUM)],
+ &regs.r_regs[31], sizeof(u_int64_t));
+
+ memset (&registers[REGISTER_BYTE (ZERO_REGNUM)], 0, sizeof(u_int64_t));
+ memset (&registers[REGISTER_BYTE (FP_REGNUM)], 0, sizeof(u_int64_t));
+
+ registers_fetched ();
+}
+
+void
+store_inferior_registers (regno)
+ int regno;
+{
+ struct reg regs; /* ptrace order, not gcc/gdb order */
+ struct fpreg fpregs;
+ int r;
+
+ for (r = 0; r < 31; r++)
+ memcpy (&regs.r_regs[r],
+ &registers[REGISTER_BYTE (r)], sizeof(u_int64_t));
+ for (r = 0; r < 32; r++)
+ memcpy (&fpregs.fpr_regs[r],
+ &registers[REGISTER_BYTE (r + FP0_REGNUM)], sizeof(u_int64_t));
+ memcpy (&regs.r_regs[31],
+ &registers[REGISTER_BYTE (PC_REGNUM)], sizeof(u_int64_t));
+
+ ptrace (PT_SETREGS, inferior_pid, (PTRACE_ARG3_TYPE) &regs, 0);
+ ptrace (PT_SETFPREGS, inferior_pid, (PTRACE_ARG3_TYPE) &fpregs, 0);
+}
+
+#ifdef HAVE_GREGSET_T
+void
+supply_gregset (gp)
+ gregset_t *gp;
+{
+ int regno = 0;
+
+ /* These must be ordered the same as REGISTER_NAMES in
+ config/alpha/tm-alpha.h. */
+ for (regno = 0; regno < 31; regno++)
+ supply_register (regno, (char *)&gp->r_regs[regno]);
+ supply_register (PC_REGNUM, (char *)&gp->r_regs[regno]);
+}
+#endif /* HAVE_GREGSET_T */
+
+#ifdef HAVE_FPREGSET_T
+void
+supply_fpregset (fp)
+ fpregset_t *fp;
+{
+ int regno = 0;
+
+ for (regno = 0; regno < 32; regno++)
+ supply_register (regno + 32, (char *)&fp->fpr_regs[regno]);
+}
+#endif /* HAVE_FPREGSET_T */