diff options
| author | cvs2svn <cvs2svn@FreeBSD.org> | 1999-05-08 01:59:28 +0000 |
|---|---|---|
| committer | cvs2svn <cvs2svn@FreeBSD.org> | 1999-05-08 01:59:28 +0000 |
| commit | e2b3ce7fb6e9d030e8d7fd9a88fd5280fde2dde3 (patch) | |
| tree | 9559f70827fbfaf8d402d161a69e2209728406dc /gnu | |
| parent | abf5dbcd9af68486d844ee62d43daacec6b189e0 (diff) | |
Notes
Diffstat (limited to 'gnu')
| -rw-r--r-- | gnu/usr.bin/binutils/gdb/Makefile | 110 | ||||
| -rw-r--r-- | gnu/usr.bin/binutils/gdb/alpha/freebsd-nat.c | 146 |
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) ®s, 0); + ptrace (PT_GETFPREGS, inferior_pid, (PTRACE_ARG3_TYPE) &fpregs, 0); + + for (r = 0; r < 31; r++) + memcpy (®isters[REGISTER_BYTE (r)], + ®s.r_regs[r], sizeof(u_int64_t)); + for (r = 0; r < 32; r++) + memcpy (®isters[REGISTER_BYTE (r + FP0_REGNUM)], + &fpregs.fpr_regs[r], sizeof(u_int64_t)); + memcpy (®isters[REGISTER_BYTE (PC_REGNUM)], + ®s.r_regs[31], sizeof(u_int64_t)); + + memset (®isters[REGISTER_BYTE (ZERO_REGNUM)], 0, sizeof(u_int64_t)); + memset (®isters[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 (®s.r_regs[r], + ®isters[REGISTER_BYTE (r)], sizeof(u_int64_t)); + for (r = 0; r < 32; r++) + memcpy (&fpregs.fpr_regs[r], + ®isters[REGISTER_BYTE (r + FP0_REGNUM)], sizeof(u_int64_t)); + memcpy (®s.r_regs[31], + ®isters[REGISTER_BYTE (PC_REGNUM)], sizeof(u_int64_t)); + + ptrace (PT_SETREGS, inferior_pid, (PTRACE_ARG3_TYPE) ®s, 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 */ |
