From 964aa8262caab95ef7a0d74f3dea9038f10fefe7 Mon Sep 17 00:00:00 2001 From: Matthew Dillon Date: Sun, 1 Feb 2004 08:53:05 +0000 Subject: [PATCH] binutils214 stage 1/4. Bring in the build infrastructure (left untied from system). This infrastructure can handle i386 but the amd64 code is not yet complete. --- gnu/usr.bin/binutils214/Makefile | 16 + gnu/usr.bin/binutils214/Makefile.inc | 6 + gnu/usr.bin/binutils214/Makefile.inc.orig | 6 + gnu/usr.bin/binutils214/Makefile.inc0 | 50 + gnu/usr.bin/binutils214/addr2line/Makefile | 18 + gnu/usr.bin/binutils214/ar/Makefile | 19 + gnu/usr.bin/binutils214/as/Makefile | 35 + gnu/usr.bin/binutils214/as/Makefile.inc | 5 + gnu/usr.bin/binutils214/as/Makefile.inc0 | 53 + .../binutils214/as/amd64-dragonfly/Makefile | 8 + .../binutils214/as/amd64-dragonfly/itbl-cpu.h | 6 + .../as/amd64-dragonfly/obj-format.h | 4 + .../binutils214/as/amd64-dragonfly/targ-cpu.h | 6 + .../binutils214/as/amd64-dragonfly/targ-env.h | 12 + gnu/usr.bin/binutils214/as/config.h | 282 +++++ .../binutils214/as/i386-dragonfly/Makefile | 13 + .../as/i386-dragonfly/obj-format.h | 4 + .../binutils214/as/i386-dragonfly/targ-cpu.h | 4 + .../binutils214/as/i386-dragonfly/targ-env.h | 12 + gnu/usr.bin/binutils214/doc/Makefile | 52 + gnu/usr.bin/binutils214/doc/asconfig.texi | 71 ++ gnu/usr.bin/binutils214/doc/inc-hist.diff | 48 + gnu/usr.bin/binutils214/gasp/Makefile | 19 + gnu/usr.bin/binutils214/gasp/gasp.1 | 116 ++ gnu/usr.bin/binutils214/gdb/Makefile | 113 ++ gnu/usr.bin/binutils214/gdb/Makefile.i386 | 8 + gnu/usr.bin/binutils214/gdb/config.h | 327 +++++ gnu/usr.bin/binutils214/gdb/freebsd-uthread.c | 1072 +++++++++++++++++ gnu/usr.bin/binutils214/gdb/gdb.1 | 386 ++++++ .../binutils214/gdb/i386/freebsd-nat.c | 682 +++++++++++ gnu/usr.bin/binutils214/gdb/i386/kvm-fbsd.c | 1056 ++++++++++++++++ .../binutils214/gdb/i386/kvm-fbsd.c.orig | 1045 ++++++++++++++++ gnu/usr.bin/binutils214/gdb/i386/nm.h | 171 +++ gnu/usr.bin/binutils214/gdb/i386/tm.h | 69 ++ gnu/usr.bin/binutils214/gdb/i386/version.c | 7 + gnu/usr.bin/binutils214/gdb/i386/xm.h | 24 + gnu/usr.bin/binutils214/gdb/wait.h | 8 + gnu/usr.bin/binutils214/gdbreplay/Makefile | 24 + gnu/usr.bin/binutils214/gdbserver/Makefile | 24 + gnu/usr.bin/binutils214/gdbserver/low-fbsd.c | 342 ++++++ gnu/usr.bin/binutils214/ld/Makefile | 61 + gnu/usr.bin/binutils214/ld/Makefile.i386 | 49 + gnu/usr.bin/binutils214/ld/config.h | 177 +++ gnu/usr.bin/binutils214/libbfd/Makefile | 93 ++ gnu/usr.bin/binutils214/libbfd/Makefile.amd64 | 7 + gnu/usr.bin/binutils214/libbfd/Makefile.i386 | 49 + .../binutils214/libbfd/config.h.template | 270 +++++ .../binutils214/libbfd/dfly_targmatch.h | 11 + .../binutils214/libbfd/elf-fbsd-brand.c | 52 + gnu/usr.bin/binutils214/libbinutils/Makefile | 21 + .../binutils214/libbinutils/Makefile.i386 | 6 + gnu/usr.bin/binutils214/libbinutils/config.h | 210 ++++ gnu/usr.bin/binutils214/libiberty/Makefile | 22 + .../binutils214/libiberty/alloca-conf.h | 4 + gnu/usr.bin/binutils214/libiberty/config.h | 260 ++++ gnu/usr.bin/binutils214/libopcodes/Makefile | 22 + .../binutils214/libopcodes/Makefile.i386 | 5 + gnu/usr.bin/binutils214/libopcodes/config.h | 138 +++ gnu/usr.bin/binutils214/nm/Makefile | 19 + gnu/usr.bin/binutils214/objcopy/Makefile | 19 + gnu/usr.bin/binutils214/objdump/Makefile | 21 + gnu/usr.bin/binutils214/ranlib/Makefile | 20 + gnu/usr.bin/binutils214/readelf/Makefile | 22 + gnu/usr.bin/binutils214/size/Makefile | 19 + gnu/usr.bin/binutils214/strings/Makefile | 19 + gnu/usr.bin/binutils214/strip/Makefile | 34 + 66 files changed, 7853 insertions(+) create mode 100644 gnu/usr.bin/binutils214/Makefile create mode 100644 gnu/usr.bin/binutils214/Makefile.inc create mode 100644 gnu/usr.bin/binutils214/Makefile.inc.orig create mode 100644 gnu/usr.bin/binutils214/Makefile.inc0 create mode 100644 gnu/usr.bin/binutils214/addr2line/Makefile create mode 100644 gnu/usr.bin/binutils214/ar/Makefile create mode 100644 gnu/usr.bin/binutils214/as/Makefile create mode 100644 gnu/usr.bin/binutils214/as/Makefile.inc create mode 100644 gnu/usr.bin/binutils214/as/Makefile.inc0 create mode 100644 gnu/usr.bin/binutils214/as/amd64-dragonfly/Makefile create mode 100644 gnu/usr.bin/binutils214/as/amd64-dragonfly/itbl-cpu.h create mode 100644 gnu/usr.bin/binutils214/as/amd64-dragonfly/obj-format.h create mode 100644 gnu/usr.bin/binutils214/as/amd64-dragonfly/targ-cpu.h create mode 100644 gnu/usr.bin/binutils214/as/amd64-dragonfly/targ-env.h create mode 100644 gnu/usr.bin/binutils214/as/config.h create mode 100644 gnu/usr.bin/binutils214/as/i386-dragonfly/Makefile create mode 100644 gnu/usr.bin/binutils214/as/i386-dragonfly/obj-format.h create mode 100644 gnu/usr.bin/binutils214/as/i386-dragonfly/targ-cpu.h create mode 100644 gnu/usr.bin/binutils214/as/i386-dragonfly/targ-env.h create mode 100644 gnu/usr.bin/binutils214/doc/Makefile create mode 100644 gnu/usr.bin/binutils214/doc/asconfig.texi create mode 100644 gnu/usr.bin/binutils214/doc/inc-hist.diff create mode 100644 gnu/usr.bin/binutils214/gasp/Makefile create mode 100644 gnu/usr.bin/binutils214/gasp/gasp.1 create mode 100644 gnu/usr.bin/binutils214/gdb/Makefile create mode 100644 gnu/usr.bin/binutils214/gdb/Makefile.i386 create mode 100644 gnu/usr.bin/binutils214/gdb/config.h create mode 100644 gnu/usr.bin/binutils214/gdb/freebsd-uthread.c create mode 100644 gnu/usr.bin/binutils214/gdb/gdb.1 create mode 100644 gnu/usr.bin/binutils214/gdb/i386/freebsd-nat.c create mode 100644 gnu/usr.bin/binutils214/gdb/i386/kvm-fbsd.c create mode 100644 gnu/usr.bin/binutils214/gdb/i386/kvm-fbsd.c.orig create mode 100644 gnu/usr.bin/binutils214/gdb/i386/nm.h create mode 100644 gnu/usr.bin/binutils214/gdb/i386/tm.h create mode 100644 gnu/usr.bin/binutils214/gdb/i386/version.c create mode 100644 gnu/usr.bin/binutils214/gdb/i386/xm.h create mode 100644 gnu/usr.bin/binutils214/gdb/wait.h create mode 100644 gnu/usr.bin/binutils214/gdbreplay/Makefile create mode 100644 gnu/usr.bin/binutils214/gdbserver/Makefile create mode 100644 gnu/usr.bin/binutils214/gdbserver/low-fbsd.c create mode 100644 gnu/usr.bin/binutils214/ld/Makefile create mode 100644 gnu/usr.bin/binutils214/ld/Makefile.i386 create mode 100644 gnu/usr.bin/binutils214/ld/config.h create mode 100644 gnu/usr.bin/binutils214/libbfd/Makefile create mode 100644 gnu/usr.bin/binutils214/libbfd/Makefile.amd64 create mode 100644 gnu/usr.bin/binutils214/libbfd/Makefile.i386 create mode 100644 gnu/usr.bin/binutils214/libbfd/config.h.template create mode 100644 gnu/usr.bin/binutils214/libbfd/dfly_targmatch.h create mode 100644 gnu/usr.bin/binutils214/libbfd/elf-fbsd-brand.c create mode 100644 gnu/usr.bin/binutils214/libbinutils/Makefile create mode 100644 gnu/usr.bin/binutils214/libbinutils/Makefile.i386 create mode 100644 gnu/usr.bin/binutils214/libbinutils/config.h create mode 100644 gnu/usr.bin/binutils214/libiberty/Makefile create mode 100644 gnu/usr.bin/binutils214/libiberty/alloca-conf.h create mode 100644 gnu/usr.bin/binutils214/libiberty/config.h create mode 100644 gnu/usr.bin/binutils214/libopcodes/Makefile create mode 100644 gnu/usr.bin/binutils214/libopcodes/Makefile.i386 create mode 100644 gnu/usr.bin/binutils214/libopcodes/config.h create mode 100644 gnu/usr.bin/binutils214/nm/Makefile create mode 100644 gnu/usr.bin/binutils214/objcopy/Makefile create mode 100644 gnu/usr.bin/binutils214/objdump/Makefile create mode 100644 gnu/usr.bin/binutils214/ranlib/Makefile create mode 100644 gnu/usr.bin/binutils214/readelf/Makefile create mode 100644 gnu/usr.bin/binutils214/size/Makefile create mode 100644 gnu/usr.bin/binutils214/strings/Makefile create mode 100644 gnu/usr.bin/binutils214/strip/Makefile diff --git a/gnu/usr.bin/binutils214/Makefile b/gnu/usr.bin/binutils214/Makefile new file mode 100644 index 0000000000..b53467552b --- /dev/null +++ b/gnu/usr.bin/binutils214/Makefile @@ -0,0 +1,16 @@ +# $FreeBSD: src/gnu/usr.bin/binutils/Makefile,v 1.11.2.5 2002/09/01 23:39:12 obrien Exp $ +# $DragonFly: src/gnu/usr.bin/binutils214/Attic/Makefile,v 1.1 2004/02/01 08:53:00 dillon Exp $ + +# XXX gasp removed. gasp does not exist as a separate entity +# in binutils-2.14 +SUBDIR= libiberty libbfd libopcodes libbinutils \ + addr2line ar as ld nm objcopy objdump ranlib readelf \ + size strings strip doc + +TARGET_ARCH?= ${MACHINE_ARCH} +.if (${TARGET_ARCH} == "alpha" || ${TARGET_ARCH} == "i386") \ + && !defined(NO_GDB) +#SUBDIR+= gdb gdbreplay +.endif + +.include diff --git a/gnu/usr.bin/binutils214/Makefile.inc b/gnu/usr.bin/binutils214/Makefile.inc new file mode 100644 index 0000000000..8ff88518e0 --- /dev/null +++ b/gnu/usr.bin/binutils214/Makefile.inc @@ -0,0 +1,6 @@ +# +# $FreeBSD: src/gnu/usr.bin/binutils/Makefile.inc,v 1.4.2.2 2002/09/01 23:39:12 obrien Exp $ +# $DragonFly: src/gnu/usr.bin/binutils214/Attic/Makefile.inc,v 1.1 2004/02/01 08:53:00 dillon Exp $ +# + +BINDIR?= /usr/libexec/binutils214/elf diff --git a/gnu/usr.bin/binutils214/Makefile.inc.orig b/gnu/usr.bin/binutils214/Makefile.inc.orig new file mode 100644 index 0000000000..6c7612e414 --- /dev/null +++ b/gnu/usr.bin/binutils214/Makefile.inc.orig @@ -0,0 +1,6 @@ +# +# $FreeBSD: src/gnu/usr.bin/binutils/Makefile.inc,v 1.4.2.2 2002/09/01 23:39:12 obrien Exp $ +# $DragonFly: src/gnu/usr.bin/binutils214/Attic/Makefile.inc.orig,v 1.1 2004/02/01 08:53:00 dillon Exp $ +# + +BINDIR?= /usr/libexec/elf diff --git a/gnu/usr.bin/binutils214/Makefile.inc0 b/gnu/usr.bin/binutils214/Makefile.inc0 new file mode 100644 index 0000000000..4bc36fe404 --- /dev/null +++ b/gnu/usr.bin/binutils214/Makefile.inc0 @@ -0,0 +1,50 @@ +# $FreeBSD: src/gnu/usr.bin/binutils/Makefile.inc0,v 1.9.2.4 2002/09/01 23:39:12 obrien Exp $ +# $DragonFly: src/gnu/usr.bin/binutils214/Attic/Makefile.inc0,v 1.1 2004/02/01 08:53:00 dillon Exp $ +# +# This is included explicitly at the top of each sub-Makefile. We can't +# use the normal "Makefile.inc" mechanism, because we need some of these +# definitions before the sub-Makefile is processed. + +VERSION= "2.14 [DragonFly] 2004-01-31" +VERSION_DATE= 20040131 + +TARGET_ARCH?= ${MACHINE_ARCH} +BINUTIL_ARCH= ${TARGET_ARCH} + +# RELTOP is the relative path to this point in the source or object +# tree, from any subdirectory of same. It gets extra "../" prefixes +# added to it as we descend into subdirectories. +RELTOP:= .. + +RELSRC= ${RELTOP}/../../../contrib/binutils-2.14 +SRCDIR= ${.CURDIR}/${RELSRC} + +.if (${TARGET_ARCH} == "alpha") +WARNS= 2 +.endif +CFLAGS+= -D_GNU_SOURCE +CFLAGS+= -I. +.if exists(${.CURDIR}/${BINUTIL_ARCH}) +CFLAGS+= -I${.CURDIR}/${BINUTIL_ARCH} +.endif +CFLAGS+= -I${.CURDIR} +CFLAGS+= -I${.CURDIR}/${RELTOP}/libbfd/${BINUTIL_ARCH} +CFLAGS+= -I${SRCDIR}/include + +.if exists(${.CURDIR}/${BINUTIL_ARCH}) +.PATH: ${.CURDIR}/${BINUTIL_ARCH} +.endif + +ARCHS= ${BINUTIL_ARCH} + +.for _arch in ${CROSS_ARCH} +.if (${ARCHS:R:M${_arch:R}} == "") +ARCHS+= $(_arch) +.endif +.endfor + +.for _arch in ${ARCHS} +.if exists(${.CURDIR}/Makefile.${_arch}) +.include "${.CURDIR}/Makefile.${_arch}" +.endif +.endfor diff --git a/gnu/usr.bin/binutils214/addr2line/Makefile b/gnu/usr.bin/binutils214/addr2line/Makefile new file mode 100644 index 0000000000..fc8ba4939c --- /dev/null +++ b/gnu/usr.bin/binutils214/addr2line/Makefile @@ -0,0 +1,18 @@ +# $FreeBSD: src/gnu/usr.bin/binutils/addr2line/Makefile,v 1.3.2.2 2002/09/01 23:39:13 obrien Exp $ +# $DragonFly: src/gnu/usr.bin/binutils214/addr2line/Attic/Makefile,v 1.1 2004/02/01 08:53:01 dillon Exp $ + +.include "../Makefile.inc0" + +.PATH: ${SRCDIR}/binutils ${SRCDIR}/binutils/doc + +PROG= addr2line +SRCS= addr2line.c +WARNS= 2 +CFLAGS+= -I${.CURDIR}/${RELTOP}/libbinutils +CFLAGS+= -I${SRCDIR}/binutils -I${.OBJDIR}/../libbfd +DPADD= ${RELTOP}/libbinutils/libbinutils.a +DPADD+= ${RELTOP}/libbfd/libbfd.a +DPADD+= ${RELTOP}/libiberty/libiberty.a +LDADD= ${DPADD} + +.include diff --git a/gnu/usr.bin/binutils214/ar/Makefile b/gnu/usr.bin/binutils214/ar/Makefile new file mode 100644 index 0000000000..c87777c29f --- /dev/null +++ b/gnu/usr.bin/binutils214/ar/Makefile @@ -0,0 +1,19 @@ +# $FreeBSD: src/gnu/usr.bin/binutils/ar/Makefile,v 1.4.2.3 2002/09/01 23:39:13 obrien Exp $ +# $DragonFly: src/gnu/usr.bin/binutils214/ar/Attic/Makefile,v 1.1 2004/02/01 08:53:03 dillon Exp $ + +.include "../Makefile.inc0" + +.PATH: ${SRCDIR}/binutils ${SRCDIR}/binutils/doc + +PROG= ar +SRCS= ar.c not-ranlib.c +CFLAGS+= -I${.CURDIR}/${RELTOP}/libbinutils +CFLAGS+= -I${SRCDIR}/binutils +CFLAGS+= -I${SRCDIR}/bfd -I${.OBJDIR}/../libbfd +NOSHARED?= yes +DPADD= ${RELTOP}/libbinutils/libbinutils.a +DPADD+= ${RELTOP}/libbfd/libbfd.a +DPADD+= ${RELTOP}/libiberty/libiberty.a +LDADD= ${DPADD} + +.include diff --git a/gnu/usr.bin/binutils214/as/Makefile b/gnu/usr.bin/binutils214/as/Makefile new file mode 100644 index 0000000000..61e8a7709b --- /dev/null +++ b/gnu/usr.bin/binutils214/as/Makefile @@ -0,0 +1,35 @@ +# $FreeBSD: src/gnu/usr.bin/binutils/as/Makefile,v 1.10.2.2 2002/09/01 23:39:13 obrien Exp $ +# $DragonFly: src/gnu/usr.bin/binutils214/as/Attic/Makefile,v 1.1 2004/02/01 08:53:03 dillon Exp $ + +.include "${.CURDIR}/../Makefile.inc0" + +GASES= ${BINUTIL_ARCH} +FORMATS=dragonfly + +# Only build the cross tools when not cross-compiling. +.if ${TARGET_ARCH} == ${MACHINE_ARCH} +.if defined(CROSS_ARCH) +.for _g in ${CROSS_ARCH} +.if (${GASES:R:M${_g:R}} == "") +GASES+= $(_g) +.endif +.endfor +.endif +.if defined(CROSS_FORMATS) +.for _f in ${CROSS_FORMATS} +.if (${FORMATS:R:M${_f:R}} == "") +FORMATS+= $(_f) +.endif +.endfor +.endif +.endif + +.for _g in ${GASES} +.for _f in ${FORMATS} +.if exists(${.CURDIR}/${_g}-${_f}) +SUBDIR+= ${_g}-${_f} +.endif +.endfor +.endfor + +.include diff --git a/gnu/usr.bin/binutils214/as/Makefile.inc b/gnu/usr.bin/binutils214/as/Makefile.inc new file mode 100644 index 0000000000..a86a54d90e --- /dev/null +++ b/gnu/usr.bin/binutils214/as/Makefile.inc @@ -0,0 +1,5 @@ +# $FreeBSD: src/gnu/usr.bin/binutils/as/Makefile.inc,v 1.3.2.2 2002/09/01 23:39:13 obrien Exp $ +# $DragonFly: src/gnu/usr.bin/binutils214/as/Attic/Makefile.inc,v 1.1 2004/02/01 08:53:03 dillon Exp $ + +# BINDIR +.include "${.CURDIR}/../../Makefile.inc" diff --git a/gnu/usr.bin/binutils214/as/Makefile.inc0 b/gnu/usr.bin/binutils214/as/Makefile.inc0 new file mode 100644 index 0000000000..86916eddb0 --- /dev/null +++ b/gnu/usr.bin/binutils214/as/Makefile.inc0 @@ -0,0 +1,53 @@ +# $FreeBSD: src/gnu/usr.bin/binutils/as/Makefile.inc0,v 1.6.2.4 2002/09/01 23:39:13 obrien Exp $ +# $DragonFly: src/gnu/usr.bin/binutils214/as/Attic/Makefile.inc0,v 1.1 2004/02/01 08:53:03 dillon Exp $ + +.include "${.CURDIR}/../../Makefile.inc0" + +RELTOP:= ../${RELTOP} +.PATH: ${SRCDIR}/gas ${SRCDIR}/gas/config + +PROG= as +MAN= doc/as.1 +SRCS+= app.c as.c atof-generic.c atof-ieee.c bignum-copy.c \ + cond.c dwarf2dbg.c ecoff.c expr.c flonum-copy.c flonum-konst.c \ + flonum-mult.c frags.c hash.c input-file.c \ + input-scrub.c listing.c literal.c macro.c messages.c \ + output-file.c read.c sb.c stabs.c \ + subsegs.c symbols.c write.c depend.c ehopt.c +# DEO: why not used? +#SRCS+= itbl-ops.c +.if (${TARGET_ARCH} == "alpha") +WARNS= 0 +.else +WARNS= 2 +.endif +CFLAGS+= -I${SRCDIR}/gas -I${SRCDIR}/gas/config -I${SRCDIR} -I${.CURDIR}/.. +CFLAGS+= -DVERSION=\"${VERSION:C/[ ]?${VERSION_DATE}[ ]?//g}\" +CFLAGS+= -DBFD_VERSION_STRING=\"${VERSION}\" +CFLAGS+= -DTE_DragonFly +NOSHARED?= yes +DPADD= ${RELTOP}/libbfd/libbfd.a +DPADD+= ${RELTOP}/libiberty/libiberty.a +DPADD+= ${RELTOP}/libopcodes/libopcodes.a +LDADD= ${DPADD} + +# tc-i386.c has some stupid code in it which makes it impossible to +# disable the use of '/' as a comment. We need to make it useable for +# a divide operator so we have to munge tc-i386.c. +# +tc-i386-local.c: tc-i386.c + sed -e 's/TE_NetBSD/TE_DragonFly/g' \ + ${.ALLSRC:M*tc-i386.c} >> ${.TARGET}.new + mv -f ${.TARGET}.new ${.TARGET} + +# If set, BINUTILSDISTDIR is the path to a directory containing the full GNU +# binutils release. FreeBSD only distributes the bits that are required to +# build native architectures. BINUTILSDISTDIR is needed to build cross tools. +.if defined(BINUTILSDISTDIR) && exists(${BINUTILSDISTDIR}) +.PATH: ${BINUTILSDISTDIR}/gas ${BINUTILSDISTDIR}/gas/config +CFLAGS+= -I${BINUTILSDISTDIR}/gas +CFLAGS+= -I${BINUTILSDISTDIR}/gas/config +CFLAGS+= -I${BINUTILSDISTDIR}/bfd +CFLAGS+= -I${BINUTILSDISTDIR}/include +CFLAGS+= -I${BINUTILSDISTDIR} +.endif diff --git a/gnu/usr.bin/binutils214/as/amd64-dragonfly/Makefile b/gnu/usr.bin/binutils214/as/amd64-dragonfly/Makefile new file mode 100644 index 0000000000..b0bc85abd1 --- /dev/null +++ b/gnu/usr.bin/binutils214/as/amd64-dragonfly/Makefile @@ -0,0 +1,8 @@ +# $FreeBSD: src/gnu/usr.bin/binutils/as/amd64-freebsd/Makefile,v 1.2 2003/08/14 14:43:28 ru Exp $ +# $DragonFly: src/gnu/usr.bin/binutils214/as/amd64-dragonfly/Attic/Makefile,v 1.1 2004/02/01 08:53:03 dillon Exp $ + +.include "${.CURDIR}/../Makefile.inc0" + +SRCS+= obj-elf.c tc-i386-local.c + +.include diff --git a/gnu/usr.bin/binutils214/as/amd64-dragonfly/itbl-cpu.h b/gnu/usr.bin/binutils214/as/amd64-dragonfly/itbl-cpu.h new file mode 100644 index 0000000000..986ef9c699 --- /dev/null +++ b/gnu/usr.bin/binutils214/as/amd64-dragonfly/itbl-cpu.h @@ -0,0 +1,6 @@ +/* + * $FreeBSD: src/gnu/usr.bin/binutils/as/amd64-freebsd/itbl-cpu.h,v 1.1 2003/04/26 03:28:20 obrien Exp $ + * $DragonFly: src/gnu/usr.bin/binutils214/as/amd64-dragonfly/Attic/itbl-cpu.h,v 1.1 2004/02/01 08:53:03 dillon Exp $ + */ + +#include "itbl-i386.h" diff --git a/gnu/usr.bin/binutils214/as/amd64-dragonfly/obj-format.h b/gnu/usr.bin/binutils214/as/amd64-dragonfly/obj-format.h new file mode 100644 index 0000000000..25546ab6ce --- /dev/null +++ b/gnu/usr.bin/binutils214/as/amd64-dragonfly/obj-format.h @@ -0,0 +1,4 @@ +/* + * $DragonFly: src/gnu/usr.bin/binutils214/as/amd64-dragonfly/Attic/obj-format.h,v 1.1 2004/02/01 08:53:03 dillon Exp $ + */ +#include "obj-elf.h" diff --git a/gnu/usr.bin/binutils214/as/amd64-dragonfly/targ-cpu.h b/gnu/usr.bin/binutils214/as/amd64-dragonfly/targ-cpu.h new file mode 100644 index 0000000000..9351818078 --- /dev/null +++ b/gnu/usr.bin/binutils214/as/amd64-dragonfly/targ-cpu.h @@ -0,0 +1,6 @@ +/* + * $FreeBSD: src/gnu/usr.bin/binutils/as/amd64-freebsd/targ-cpu.h,v 1.1 2003/04/26 03:28:20 obrien Exp $ + * $DragonFly: src/gnu/usr.bin/binutils214/as/amd64-dragonfly/Attic/targ-cpu.h,v 1.1 2004/02/01 08:53:03 dillon Exp $ + */ + +#include "tc-i386.h" diff --git a/gnu/usr.bin/binutils214/as/amd64-dragonfly/targ-env.h b/gnu/usr.bin/binutils214/as/amd64-dragonfly/targ-env.h new file mode 100644 index 0000000000..49e5a7d9c2 --- /dev/null +++ b/gnu/usr.bin/binutils214/as/amd64-dragonfly/targ-env.h @@ -0,0 +1,12 @@ +/* + * Default target format spec for the assembler + * + * $DragonFly: src/gnu/usr.bin/binutils214/as/amd64-dragonfly/Attic/targ-env.h,v 1.1 2004/02/01 08:53:03 dillon Exp $ + */ + +#define ELF_TARGET_FORMAT "elf64-amd64-dragonfly" +#define LOCAL_LABELS_DOLLAR 1 +#define LOCAL_LABELS_FB 1 + +#include "obj-format.h" + diff --git a/gnu/usr.bin/binutils214/as/config.h b/gnu/usr.bin/binutils214/as/config.h new file mode 100644 index 0000000000..754e4b5050 --- /dev/null +++ b/gnu/usr.bin/binutils214/as/config.h @@ -0,0 +1,282 @@ +/* + * $FreeBSD: src/gnu/usr.bin/binutils/as/i386-freebsd/config.h,v 1.1.6.4 2002/09/01 23:39:13 obrien Exp $ + * $DragonFly: src/gnu/usr.bin/binutils214/as/Attic/config.h,v 1.1 2004/02/01 08:53:03 dillon Exp $ + */ + +/* config.h. Generated automatically by configure. */ +/* config.in. Generated automatically from configure.in by autoheader. */ + +/* Define if using alloca.c. */ +/* #undef C_ALLOCA */ + +/* Define to empty if the keyword does not work. */ +/* #undef const */ + +/* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems. + This function is required for alloca.c support on those systems. */ +/* #undef CRAY_STACKSEG_END */ + +/* Define if you have alloca, as a function or macro. */ +#define HAVE_ALLOCA 1 + +/* Define if you have and it should be used (not on Ultrix). */ +/* #undef HAVE_ALLOCA_H */ + +/* Define if you have a working `mmap' system call. */ +#define HAVE_MMAP 1 + +/* Define as __inline if that's what the C compiler calls it. */ +/* #undef inline */ + +/* Define to `long' if doesn't define. */ +/* #undef off_t */ + +/* Define if you need to in order for stat and other things to work. */ +/* #undef _POSIX_SOURCE */ + +/* Define to `unsigned' if doesn't define. */ +/* #undef size_t */ + +/* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be + automatically deduced at run-time. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown + */ +/* #undef STACK_DIRECTION */ + +/* Define if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Define if lex declares yytext as a char * by default, not a char[]. */ +#define YYTEXT_POINTER 1 + +/* Define if you have the __argz_count function. */ +/* #undef HAVE___ARGZ_COUNT */ + +/* Define if you have the __argz_next function. */ +/* #undef HAVE___ARGZ_NEXT */ + +/* Define if you have the __argz_stringify function. */ +/* #undef HAVE___ARGZ_STRINGIFY */ + +/* Define if you have the dcgettext function. */ +/* #undef HAVE_DCGETTEXT */ + +/* Define if you have the getcwd function. */ +#define HAVE_GETCWD 1 + +/* Define if you have the getpagesize function. */ +#define HAVE_GETPAGESIZE 1 + +/* Define if you have the munmap function. */ +#define HAVE_MUNMAP 1 + +/* Define if you have the putenv function. */ +#define HAVE_PUTENV 1 + +/* Define if you have the remove function. */ +/* #undef HAVE_REMOVE */ + +/* Define if you have the sbrk function. */ +#define HAVE_SBRK 1 + +/* Define if you have the setenv function. */ +#define HAVE_SETENV 1 + +/* Define if you have the setlocale function. */ +#define HAVE_SETLOCALE 1 + +/* Define if you have the stpcpy function. */ +/* #undef HAVE_STPCPY */ + +/* Define if you have the strcasecmp function. */ +#define HAVE_STRCASECMP 1 + +/* Define if you have the strchr function. */ +#define HAVE_STRCHR 1 + +/* Define if you have the unlink function. */ +#define HAVE_UNLINK 1 + +/* Define if you have the header file. */ +/* #undef HAVE_ARGZ_H */ + +/* Define if you have the header file. */ +#define HAVE_ERRNO_H 1 + +/* Define if you have the header file. */ +#define HAVE_LIMITS_H 1 + +/* Define if you have the header file. */ +#define HAVE_LOCALE_H 1 + +/* Define if you have the header file. */ +/* #undef HAVE_MALLOC_H */ + +/* Define if you have the header file. */ +#define HAVE_MEMORY_H 1 + +/* Define if you have the header file. */ +#define HAVE_NL_TYPES_H 1 + +/* Define if you have the header file. */ +#define HAVE_STDARG_H 1 + +/* Define if you have the header file. */ +#define HAVE_STDLIB_H 1 + +/* Define if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define if you have the header file. */ +#define HAVE_STRINGS_H 1 + +/* Define if you have the header file. */ +#define HAVE_SYS_PARAM_H 1 + +/* Define if you have the header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define if you have the header file. */ +#define HAVE_UNISTD_H 1 + +/* Define if you have the header file. */ +/* #undef HAVE_VALUES_H */ + +/* Define if you have the header file. */ +#define HAVE_VARARGS_H 1 + +/* Name of package */ +#define PACKAGE "gas" + +/* Version number of package */ +/* #define VERSION "2.12" */ + +/* Define if defaulting to ELF on SCO 5. */ +/* #undef SCO_ELF */ + +/* Using strict COFF? */ +/* #undef STRICTCOFF */ + +/* Define if default target is PowerPC Solaris. */ +/* #undef TARGET_SOLARIS_COMMENT */ + +/* Define as 1 if big endian. */ +/* #undef TARGET_BYTES_BIG_ENDIAN */ + +/* Use ELF stabs for MIPS, not ECOFF stabs */ +/* #undef MIPS_STABS_ELF */ + +/* Default architecture. */ +/* #define DEFAULT_ARCH "i386" */ + +/* Using cgen code? */ +/* #undef USING_CGEN */ + +/* Using i386 COFF? */ +/* #undef I386COFF */ + +/* Using m68k COFF? */ +/* #undef M68KCOFF */ + +/* Using m88k COFF? */ +/* #undef M88KCOFF */ + +/* a.out support? */ +/* #undef OBJ_MAYBE_AOUT */ + +/* b.out support? */ +/* #undef OBJ_MAYBE_BOUT */ + +/* COFF support? */ +/* #undef OBJ_MAYBE_COFF */ + +/* ECOFF support? */ +/* #undef OBJ_MAYBE_ECOFF */ + +/* ELF support? */ +/* #undef OBJ_MAYBE_ELF */ + +/* generic support? */ +/* #undef OBJ_MAYBE_GENERIC */ + +/* HP300 support? */ +/* #undef OBJ_MAYBE_HP300 */ + +/* IEEE support? */ +/* #undef OBJ_MAYBE_IEEE */ + +/* SOM support? */ +/* #undef OBJ_MAYBE_SOM */ + +/* VMS support? */ +/* #undef OBJ_MAYBE_VMS */ + +/* Use emulation support? */ +/* #undef USE_EMULATIONS */ + +/* Supported emulations. */ +#define EMULATIONS &i386elf, + +/* Default emulation. */ +#define DEFAULT_EMULATION "i386elf" + +/* old COFF support? */ +/* #undef MANY_SEGMENTS */ + +/* Use BFD interface? */ +#define BFD_ASSEMBLER 1 + +/* Target alias. */ +#define TARGET_ALIAS "i386-dillon-dragonfly1.0" + +/* Canonical target. */ +#define TARGET_CANONICAL "i386-dillon-dragonfly1.0" + +/* Target CPU. */ +#define TARGET_CPU "i386" + +/* Target vendor. */ +#define TARGET_VENDOR "dillon" + +/* Target OS. */ +#define TARGET_OS "dragonfly1.0" + +/* Define if you have the stpcpy function */ +/* #undef HAVE_STPCPY */ + +/* Define if your locale.h file contains LC_MESSAGES. */ +#define HAVE_LC_MESSAGES 1 + +/* Define to 1 if NLS is requested */ +/* #define ENABLE_NLS 1 */ + +/* Define as 1 if you have gettext and don't want to use GNU gettext. */ +/* #undef HAVE_GETTEXT */ + +/* Compiling cross-assembler? */ +/* #undef CROSS_COMPILE */ + +/* assert broken? */ +/* #undef BROKEN_ASSERT */ + +/* Define if strstr is not declared in system header files. */ +/* #undef NEED_DECLARATION_STRSTR */ + +/* Define if malloc is not declared in system header files. */ +/* #undef NEED_DECLARATION_MALLOC */ + +/* Define if free is not declared in system header files. */ +/* #undef NEED_DECLARATION_FREE */ + +/* Define if sbrk is not declared in system header files. */ +/* #undef NEED_DECLARATION_SBRK */ + +/* Define if environ is not declared in system header files. */ +#define NEED_DECLARATION_ENVIRON 1 + +/* Define if errno is not declared in system header files. */ +/* #undef NEED_DECLARATION_ERRNO */ + diff --git a/gnu/usr.bin/binutils214/as/i386-dragonfly/Makefile b/gnu/usr.bin/binutils214/as/i386-dragonfly/Makefile new file mode 100644 index 0000000000..5cbf27b520 --- /dev/null +++ b/gnu/usr.bin/binutils214/as/i386-dragonfly/Makefile @@ -0,0 +1,13 @@ +# $FreeBSD: src/gnu/usr.bin/binutils/as/i386-freebsd/Makefile,v 1.7.2.3 2002/09/01 23:39:13 obrien Exp $ +# $DragonFly: src/gnu/usr.bin/binutils214/as/i386-dragonfly/Attic/Makefile,v 1.1 2004/02/01 08:53:03 dillon Exp $ + +.include "${.CURDIR}/../Makefile.inc0" + +CFLAGS += -I${.OBJDIR}/../../libbfd +NOMAN= true +.if ${TARGET_ARCH} != "i386" +BINDIR= /usr/libexec/cross/i386-dragonfly +.endif +SRCS+= obj-elf.c tc-i386-local.c + +.include diff --git a/gnu/usr.bin/binutils214/as/i386-dragonfly/obj-format.h b/gnu/usr.bin/binutils214/as/i386-dragonfly/obj-format.h new file mode 100644 index 0000000000..6e31205b4c --- /dev/null +++ b/gnu/usr.bin/binutils214/as/i386-dragonfly/obj-format.h @@ -0,0 +1,4 @@ +/* + * $DragonFly: src/gnu/usr.bin/binutils214/as/i386-dragonfly/Attic/obj-format.h,v 1.1 2004/02/01 08:53:03 dillon Exp $ + */ +#include "obj-elf.h" diff --git a/gnu/usr.bin/binutils214/as/i386-dragonfly/targ-cpu.h b/gnu/usr.bin/binutils214/as/i386-dragonfly/targ-cpu.h new file mode 100644 index 0000000000..da2770f6e0 --- /dev/null +++ b/gnu/usr.bin/binutils214/as/i386-dragonfly/targ-cpu.h @@ -0,0 +1,4 @@ +/* + * $DragonFly: src/gnu/usr.bin/binutils214/as/i386-dragonfly/Attic/targ-cpu.h,v 1.1 2004/02/01 08:53:03 dillon Exp $ + */ +#include "tc-i386.h" diff --git a/gnu/usr.bin/binutils214/as/i386-dragonfly/targ-env.h b/gnu/usr.bin/binutils214/as/i386-dragonfly/targ-env.h new file mode 100644 index 0000000000..2a4a5ef55c --- /dev/null +++ b/gnu/usr.bin/binutils214/as/i386-dragonfly/targ-env.h @@ -0,0 +1,12 @@ +/* + * Default target format spec for the assembler + * + * $DragonFly: src/gnu/usr.bin/binutils214/as/i386-dragonfly/Attic/targ-env.h,v 1.1 2004/02/01 08:53:03 dillon Exp $ + */ + +#define ELF_TARGET_FORMAT "elf32-i386-dragonfly" +#define LOCAL_LABELS_DOLLAR 1 +#define LOCAL_LABELS_FB 1 + +#include "obj-format.h" + diff --git a/gnu/usr.bin/binutils214/doc/Makefile b/gnu/usr.bin/binutils214/doc/Makefile new file mode 100644 index 0000000000..26d5d41f9e --- /dev/null +++ b/gnu/usr.bin/binutils214/doc/Makefile @@ -0,0 +1,52 @@ +# $FreeBSD: src/gnu/usr.bin/binutils/doc/Makefile,v 1.4.2.5 2002/09/01 23:39:14 obrien Exp $ +# $DragonFly: src/gnu/usr.bin/binutils214/doc/Attic/Makefile,v 1.1 2004/02/01 08:53:03 dillon Exp $ + +.include "../Makefile.inc0" + +GDBDIR= ${.CURDIR}/../../../../contrib/gdb +CONTRIBDIR= ${.CURDIR}/../../../../contrib + +.PATH: ${SRCDIR}/gas/doc ${SRCDIR}/ld ${SRCDIR}/bfd/doc ${GDBDIR}/gdb/doc + +# GASP removed +INFO = as ld annotate gdb gdbint stabs binutils +INFOSECTION= "Programming & development tools." +INFOENTRY_as= "* As: (as). The GNU assembler." +INFOENTRY_gasp= "* Gasp: (gasp). The GNU Assembler Macro Preprocessor." +INFOENTRY_ld= "* Ld: (ld). The GNU linker." +INFOENTRY_annotate= "* GDB annotation: (annotate). Annotations for the GNU Debugger (GDB)." +INFOENTRY_binutils= "* Binutils: (binutils). The GNU Binary Utilities." + +MAKEINFOFLAGS+= --no-validate +MAKEINFOFLAGS+= -I ${SRCDIR}/gas/doc -I ${SRCDIR}/ld -I ${SRCDIR}/bfd/doc +MAKEINFOFLAGS+= -I ${SRCDIR}/binutils +MAKEINFOFLAGS+= -I ${GDBDIR}/gdb/doc +MAKEINFOFLAGS+= -I ${CONTRIBDIR}/libreadline/doc + +CLEANFILES= gdb-cfg.texi inc-hist.texi inc-hist.texi.orig \ + gasver.texi ldver.texi + +as.info: as.texinfo asconfig.texi c-i386.texi gasver.texi +ld.info: ld.texinfo bfdsumm.texi ldver.texi configdoc.texi + +configdoc.texi: gen-doc.texi + ln -sf ${.ALLSRC} ${.TARGET} + +gdb.info: gdb.texinfo gdb-cfg.texi GDBvn.texi remote.texi \ + rluser.texinfo inc-hist.texi + +gdb-cfg.texi: all-cfg.texi + ln -sf ${.ALLSRC} ${.TARGET} + +.PATH: ${SRCDIR}/binutils/doc +binutils.info: binutils.texi config.texi + +config.texi gasver.texi ldver.texi: + echo "@set VERSION ${VERSION}" > ${.TARGET} + +.PATH: ${CONTRIBDIR}/libreadline/doc +inc-hist.texi: hsuser.texinfo inc-hist.diff + cp ${.ALLSRC:M*.texinfo} ${.TARGET} + patch -b .orig < ${.ALLSRC:M*.diff} + +.include diff --git a/gnu/usr.bin/binutils214/doc/asconfig.texi b/gnu/usr.bin/binutils214/doc/asconfig.texi new file mode 100644 index 0000000000..ad4be8f11e --- /dev/null +++ b/gnu/usr.bin/binutils214/doc/asconfig.texi @@ -0,0 +1,71 @@ +@c Copyright 1992, 1993 Free Software Foundation, Inc. +@c This file is part of the documentation for the GAS manual +@c $DragonFly: src/gnu/usr.bin/binutils214/doc/Attic/asconfig.texi,v 1.1 2004/02/01 08:53:03 dillon Exp $ + +@c Configuration settings for all-inclusive version of manual + +@c switches:------------------------------------------------------------ +@c Properties of the manual +@c ======================== +@c Discuss all architectures? +@clear ALL-ARCH +@c A generic form of manual (not tailored to specific target)? +@clear GENERIC +@c Include text on assembler internals? +@set INTERNALS +@c Many object formats supported in this config? +@clear MULTI-OBJ + +@c Object formats of interest +@c ========================== +@clear AOUT +@clear BOUT +@clear COFF +@set ELF +@clear SOM + +@c CPUs of interest +@c ================ +@clear A29K +@clear ARC +@clear ARM +@clear D10V +@clear H8/300 +@clear H8/500 +@clear SH +@set I80386 +@clear I960 +@clear MIPS +@clear M32R +@clear M680X0 +@clear Z8000 +@clear SPARC +@clear VAX +@clear VXWORKS +@clear HPPA +@clear V850 + +@c Does this version of the assembler use the difference-table kluge? +@clear DIFF-TBL-KLUGE + +@c Do all machines described use IEEE floating point? +@set IEEEFLOAT + +@c Is a word 32 bits, or 16? +@set W32 +@clear W16 + +@c Do symbols have different characters than usual? +@clear SPECIAL-SYMS + +@c strings:------------------------------------------------------------ +@c Name of the assembler: +@set AS as +@c Name of C compiler: +@set GCC gcc +@c Name of linker: +@set LD ld +@c Text for target machine (best not used in generic case; but just in case...) +@set TARGET i386 +@c Name of object format (NOT SET in generic version) +@set OBJ-NAME ELF diff --git a/gnu/usr.bin/binutils214/doc/inc-hist.diff b/gnu/usr.bin/binutils214/doc/inc-hist.diff new file mode 100644 index 0000000000..18747582aa --- /dev/null +++ b/gnu/usr.bin/binutils214/doc/inc-hist.diff @@ -0,0 +1,48 @@ +$FreeBSD: src/gnu/usr.bin/binutils/doc/inc-hist.diff,v 1.1.6.1 2000/07/06 22:15:49 obrien Exp $ +$DragonFly: src/gnu/usr.bin/binutils214/doc/Attic/inc-hist.diff,v 1.1 2004/02/01 08:53:03 dillon Exp $ + +*** inc-hist.texi.orig Mon Mar 20 10:43:36 2000 +--- inc-hist.texi Mon Mar 20 10:48:17 2000 +*************** +*** 26,34 **** + @node Using History Interactively + @chapter Using History Interactively + +! @ifclear BashFeatures +! @defcodeindex bt +! @end ifclear + + @ifset BashFeatures + This chapter describes how to use the @sc{gnu} History Library +--- 26,34 ---- + @node Using History Interactively + @chapter Using History Interactively + +! @c @ifclear BashFeatures +! @c @defcodeindex bt +! @c @end ifclear + + @ifset BashFeatures + This chapter describes how to use the @sc{gnu} History Library +*************** +*** 39,47 **** + @end ifset + @ifclear BashFeatures + This chapter describes how to use the GNU History Library interactively, +! from a user's standpoint. It should be considered a user's guide. For +! information on using the GNU History Library in your own programs, +! @pxref{Programming with GNU History}. + @end ifclear + + @ifset BashFeatures +--- 39,48 ---- + @end ifset + @ifclear BashFeatures + This chapter describes how to use the GNU History Library interactively, +! from a user's standpoint. +! @c It should be considered a user's guide. For +! @c information on using the GNU History Library in your own programs, +! @c @pxref{Programming with GNU History}. + @end ifclear + + @ifset BashFeatures diff --git a/gnu/usr.bin/binutils214/gasp/Makefile b/gnu/usr.bin/binutils214/gasp/Makefile new file mode 100644 index 0000000000..fe8d83227c --- /dev/null +++ b/gnu/usr.bin/binutils214/gasp/Makefile @@ -0,0 +1,19 @@ +# $FreeBSD: src/gnu/usr.bin/binutils/gasp/Makefile,v 1.6.2.2 2002/09/01 23:39:14 obrien Exp $ +# $DragonFly: src/gnu/usr.bin/binutils214/gasp/Attic/Makefile,v 1.1 2004/02/01 08:53:03 dillon Exp $ + +.include "../Makefile.inc0" + +.PATH: ${SRCDIR}/gas + +PROG= gasp +SRCS+= as.c macro.c sb.c hash.c +WARNS= 2 +CFLAGS+= -DBFD_ASSEMBLER -DVERSION=\"${VERSION}\" +CFLAGS+= -I${SRCDIR} -I${SRCDIR}/gas -I${SRCDIR}/gas/config +CFLAGS+= -I${.CURDIR}/../as/${TARGET_ARCH}-freebsd -I${.CURDIR}/../as +CFLAGS+= -I${.OBJDIR}/../libbfd + +DPADD= ${RELTOP}/libiberty/libiberty.a +LDADD= ${DPADD} + +.include diff --git a/gnu/usr.bin/binutils214/gasp/gasp.1 b/gnu/usr.bin/binutils214/gasp/gasp.1 new file mode 100644 index 0000000000..3caba4b168 --- /dev/null +++ b/gnu/usr.bin/binutils214/gasp/gasp.1 @@ -0,0 +1,116 @@ +.\" Copyright (c) 1999 +.\" The Regents of the University of California. All rights reserved. +.\" and David E. O'Brien +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. Neither the name of the University nor the names of its contributors +.\" may be used to endorse or promote products derived from this software +.\" without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" $FreeBSD: src/gnu/usr.bin/binutils/gasp/gasp.1,v 1.1.2.4 2002/09/01 23:39:14 obrien Exp $ +.\" $DragonFly: src/gnu/usr.bin/binutils214/gasp/Attic/gasp.1,v 1.1 2004/02/01 08:53:03 dillon Exp $ +.\" +.Dd December 29, 1999 +.Dt GASP 1 +.Os +.Sh NAME +.Nm gasp +.Nd the GNU Assembler Macro Preprocessor +.Sh SYNOPSIS +.Nm +.Op Fl adhMpsuv +.Op Fl c Ar char +.Op Fl o Ar outfile +.Op Fl D Ns Ar name=value +.Op Fl I Ns Ar path +.Op infile +.Sh DESCRIPTION +.Nm +is the GNU Assembler Macro Preprocessor. +The argument +.Ar infile +is processed and the resulting text is sent to the standard output. +.Pp +The options are as follows: +.Bl -tag -width "-Dname=value" +.It Fl a +Enter enter alternate macro mode. +Also specifiable as +.Op Fl \-alternate +.It Fl c Ar char +Change the comment character from `!' +Also specifiable as +.Op Fl \-commentchar\ char +.It Fl d +Print limited debugging information. +Also specifiable as +.Op Fl \-debug +.It Fl h +Print the help message. +Also specifiable as +.Op Fl \-help +.It Fl M +Enter MRI compatibility mode +Also specifiable as +.Op Fl \-mri +.It Fl o Ar outfile +Specify the output file. +Also specifiable as +.Op Fl \-output\ outfile +.It Fl p +Print line numbers. +Also specifiable as +.Op Fl \-print +.It Fl s +Copy source through as comments. +Also specifiable as +.Op Fl \-copysource +.It Fl u +Allow unreasonable nesting. +Also specifiable as +.Op Fl \-unreasonable +.It Fl v +Print the program version and exit. +Also specifiable as +.Op Fl \-version +.It Fl D Ns Ar name=value +Define the preprocessor symbol +.Ar name +to have the value specified by "value". +.It Fl I Ns Ar path +Add +.Ar path +to the include path list. +.El +.Sh SEE ALSO +.Xr cpp 1 , +.Xr m4 1 +.Rs +.%T The gasp GNU hypertext system info pages +.Re +.Sh HISTORY +The +.Nm +command is part of the GNU Binutils package. +.Sh AUTHORS +This man page was written by +.An David E. O'Brien . diff --git a/gnu/usr.bin/binutils214/gdb/Makefile b/gnu/usr.bin/binutils214/gdb/Makefile new file mode 100644 index 0000000000..faaf742cb8 --- /dev/null +++ b/gnu/usr.bin/binutils214/gdb/Makefile @@ -0,0 +1,113 @@ +# $FreeBSD: src/gnu/usr.bin/binutils/gdb/Makefile,v 1.43.2.4 2002/06/25 05:04:46 obrien Exp $ +# $DragonFly: src/gnu/usr.bin/binutils214/gdb/Attic/Makefile,v 1.1 2004/02/01 08:53:04 dillon Exp $ + +.include "../Makefile.inc0" + +.PATH: ${SRCDIR}/binutils + +.if ${MACHINE_ARCH} == "i386" +CFLAGS+= -Dprint_insn_i386=print_insn_i386_att +.endif + +NOSHARED?=yes +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 core-regset.c \ + corefile.c corelow.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 freebsd-uthread.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 +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 -I${.OBJDIR}/../libbfd +CFLAGS+= -I${GDBDIR}/gdb +CFLAGS+= -I${GDBDIR}/gdb/config +DPADD= ${RELTOP}/libbfd/libbfd.a +DPADD+= ${RELTOP}/libopcodes/libopcodes.a +DPADD+= ${LIBGNUREGEX} +DPADD+= ${RELTOP}/libiberty/libiberty.a +DPADD+= ${LIBREADLINE} +DPADD+= ${LIBTERMCAP} +LDADD+= ${RELTOP}/libbfd/libbfd.a +LDADD+= ${RELTOP}/libopcodes/libopcodes.a +LDADD+= -lgnuregex +LDADD+= ${RELTOP}/libiberty/libiberty.a +LDADD+= -lreadline +LDADD+= -ltermcap + +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 diff --git a/gnu/usr.bin/binutils214/gdb/Makefile.i386 b/gnu/usr.bin/binutils214/gdb/Makefile.i386 new file mode 100644 index 0000000000..3f3b15170f --- /dev/null +++ b/gnu/usr.bin/binutils214/gdb/Makefile.i386 @@ -0,0 +1,8 @@ +# +# $FreeBSD: src/gnu/usr.bin/binutils/gdb/Makefile.i386,v 1.2 1999/08/27 23:34:49 peter Exp $ +# $DragonFly: src/gnu/usr.bin/binutils214/gdb/Attic/Makefile.i386,v 1.1 2004/02/01 08:53:04 dillon Exp $ +# + +XSRCS+= freebsd-nat.c i386-tdep.c i387-tdep.c kvm-fbsd.c + +.PATH: ${.CURDIR}/i386 diff --git a/gnu/usr.bin/binutils214/gdb/config.h b/gnu/usr.bin/binutils214/gdb/config.h new file mode 100644 index 0000000000..3c86bc1d13 --- /dev/null +++ b/gnu/usr.bin/binutils214/gdb/config.h @@ -0,0 +1,327 @@ +/* config.h. Generated automatically by configure. */ +/* config.in. Generated automatically from configure.in by autoheader. */ +/* $DragonFly: src/gnu/usr.bin/binutils214/gdb/Attic/config.h,v 1.1 2004/02/01 08:53:04 dillon Exp $ */ + +/* Whether malloc must be declared even if is included. */ +/* #undef NEED_DECLARATION_MALLOC */ + +/* Whether realloc must be declared even if is included. */ +/* #undef NEED_DECLARATION_REALLOC */ + +/* Whether free must be declared even if is included. */ +/* #undef NEED_DECLARATION_FREE */ + +/* Whether strerror must be declared even if is included. */ +/* #undef NEED_DECLARATION_STRERROR */ + +/* Define if on AIX 3. + System headers sometimes define this. + We just want to avoid a redefinition error message. */ +#ifndef _ALL_SOURCE +/* #undef _ALL_SOURCE */ +#endif + +/* Define if using alloca.c. */ +/* #undef C_ALLOCA */ + +/* Define to empty if the keyword does not work. */ +/* #undef const */ + +/* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems. + This function is required for alloca.c support on those systems. */ +/* #undef CRAY_STACKSEG_END */ + +/* Define if you have alloca, as a function or macro. */ +#define HAVE_ALLOCA 1 + +/* Define if you have and it should be used (not on Ultrix). */ +/* #undef HAVE_ALLOCA_H */ + +/* Define if the `long double' type works. */ +#define HAVE_LONG_DOUBLE 1 + +/* Define if you have a working `mmap' system call. */ +#define HAVE_MMAP 1 + +/* Define as __inline if that's what the C compiler calls it. */ +/* #undef inline */ + +/* Define to `long' if doesn't define. */ +/* #undef off_t */ + +/* Define if you need to in order for stat and other things to work. */ +/* #undef _POSIX_SOURCE */ + +/* Define as the return type of signal handlers (int or void). */ +#define RETSIGTYPE void + +/* Define to `unsigned' if doesn't define. */ +/* #undef size_t */ + +/* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be + automatically deduced at run-time. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown + */ +/* #undef STACK_DIRECTION */ + +/* Define if the `S_IS*' macros in do not work properly. */ +/* #undef STAT_MACROS_BROKEN */ + +/* Define if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Define if ioctl argument PIOCSET is available. */ +/* #undef HAVE_PROCFS_PIOCSET */ + +/* /proc PID entries are directories containing the files + ctl as map status */ +/* #undef HAVE_MULTIPLE_PROC_FDS */ + +/* Define if the `long long' type works. */ +#define CC_HAS_LONG_LONG 1 + +/* Define if the "ll" format works to print long long ints. */ +#define PRINTF_HAS_LONG_LONG 1 + +/* Define if the "%Lg" format works to print long doubles. */ +#define PRINTF_HAS_LONG_DOUBLE 1 + +/* Define if the "%Lg" format works to scan long doubles. */ +#define SCANF_HAS_LONG_DOUBLE 1 + +/* Define if using Solaris thread debugging. */ +/* #undef HAVE_THREAD_DB_LIB */ + +/* Define on a GNU/Linux system to work around problems in sys/procfs.h. */ +/* #undef START_INFERIOR_TRAPS_EXPECTED */ +/* #undef sys_quotactl */ + +/* Define if you have HPUX threads */ +/* #undef HAVE_HPUX_THREAD_SUPPORT */ + +/* Define if you want to use the memory mapped malloc package (mmalloc). */ +/* #undef USE_MMALLOC */ + +/* Define if the runtime uses a routine from mmalloc before gdb has a chance + to initialize mmalloc, and we want to force checking to be used anyway. + This may cause spurious memory corruption messages if the runtime tries + to explicitly deallocate that memory when gdb calls exit. */ +/* #undef MMCHECK_FORCE */ + +/* Define if you want to use the full-screen terminal user interface. */ +/* #undef TUI */ + +/* Define if on solaris uses int instead of + size_t, and assorted other type changes. */ +/* #undef PROC_SERVICE_IS_OLD */ + +/* Set to true if the save_state_t structure is present */ +#define HAVE_STRUCT_SAVE_STATE_T 0 + +/* Set to true if the save_state_t structure has the ss_wide member */ +#define HAVE_STRUCT_MEMBER_SS_WIDE 0 + +/* Define if you have the __argz_count function. */ +/* #undef HAVE___ARGZ_COUNT */ + +/* Define if you have the __argz_next function. */ +/* #undef HAVE___ARGZ_NEXT */ + +/* Define if you have the __argz_stringify function. */ +/* #undef HAVE___ARGZ_STRINGIFY */ + +/* Define if you have the bcopy function. */ +#define HAVE_BCOPY 1 + +/* Define if you have the btowc function. */ +/* #undef HAVE_BTOWC */ + +/* Define if you have the bzero function. */ +#define HAVE_BZERO 1 + +/* Define if you have the dcgettext function. */ +/* #undef HAVE_DCGETTEXT */ + +/* Define if you have the getcwd function. */ +#define HAVE_GETCWD 1 + +/* Define if you have the getpagesize function. */ +#define HAVE_GETPAGESIZE 1 + +/* Define if you have the isascii function. */ +#define HAVE_ISASCII 1 + +/* Define if you have the munmap function. */ +#define HAVE_MUNMAP 1 + +/* Define if you have the putenv function. */ +#define HAVE_PUTENV 1 + +/* Define if you have the sbrk function. */ +#define HAVE_SBRK 1 + +/* Define if you have the setenv function. */ +#define HAVE_SETENV 1 + +/* Define if you have the setlocale function. */ +#define HAVE_SETLOCALE 1 + +/* Define if you have the setpgid function. */ +#define HAVE_SETPGID 1 + +/* Define if you have the sigaction function. */ +#define HAVE_SIGACTION 1 + +/* Define if you have the stpcpy function. */ +/* #undef HAVE_STPCPY */ + +/* Define if you have the strcasecmp function. */ +#define HAVE_STRCASECMP 1 + +/* Define if you have the strchr function. */ +#define HAVE_STRCHR 1 + +/* Define if you have the header file. */ +/* #undef HAVE_ARGZ_H */ + +/* Define if you have the header file. */ +/* #undef HAVE_ASM_DEBUGREG_H */ + +/* Define if you have the header file. */ +#define HAVE_CTYPE_H 1 + +/* Define if you have the header file. */ +#define HAVE_CURSES_H 1 + +/* Define if you have the header file. */ +/* #undef HAVE_ENDIAN_H */ + +/* Define if you have the header file. */ +#define HAVE_LIMITS_H 1 + +/* Define if you have the header file. */ +#define HAVE_LINK_H 1 + +/* Define if you have the header file. */ +#define HAVE_LOCALE_H 1 + +/* Define if you have the header file. */ +/* #undef HAVE_MALLOC_H */ + +/* Define if you have the header file. */ +#define HAVE_MEMORY_H 1 + +/* Define if you have the header file. */ +#define HAVE_NL_TYPES_H 1 + +/* Define if you have the header file. */ +/* #undef HAVE_OBJLIST_H */ + +/* Define if you have the header file. */ +/* #undef HAVE_PTRACE_H */ + +/* Define if you have the header file. */ +#define HAVE_SGTTY_H 1 + +/* Define if you have the header file. */ +#define HAVE_STDDEF_H 1 + +/* Define if you have the header file. */ +#define HAVE_STDLIB_H 1 + +/* Define if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define if you have the header file. */ +/* #undef HAVE_SYS_DEBUGREG_H */ + +/* Define if you have the header file. */ +#define HAVE_SYS_PARAM_H 1 + +/* Define if you have the header file. */ +#define HAVE_SYS_PROCFS_H 1 + +/* Define if you have the header file. */ +#define HAVE_SYS_PTRACE_H 1 + +/* Define if you have the header file. */ +/* #undef HAVE_SYS_REG_H */ + +/* Define if you have the header file. */ +#define HAVE_SYS_WAIT_H 1 + +/* Define if you have the header file. */ +#define HAVE_TERM_H 1 + +/* Define if you have the header file. */ +/* #undef HAVE_TERMIO_H */ + +/* Define if you have the header file. */ +#define HAVE_TERMIOS_H 1 + +/* Define if you have the header file. */ +#define HAVE_UNISTD_H 1 + +/* Define if you have the header file. */ +/* #undef HAVE_VALUES_H */ + +/* Define if you have the header file. */ +/* #undef HAVE_WAIT_H */ + +/* Define if you have the header file. */ +/* #undef HAVE_WCHAR_H */ + +/* Define if you have the header file. */ +/* #undef HAVE_WCTYPE_H */ + +/* Define if you have the dl library (-ldl). */ +/* #undef HAVE_LIBDL */ + +/* Define if you have the m library (-lm). */ +#define HAVE_LIBM 1 + +/* Define if you have the w library (-lw). */ +/* #undef HAVE_LIBW */ + +/* Define if you have the stpcpy function */ +/* #undef HAVE_STPCPY */ + +/* Define if your locale.h file contains LC_MESSAGES. */ +#define HAVE_LC_MESSAGES 1 + +/* Define to 1 if NLS is requested */ +#define ENABLE_NLS 1 + +/* Define as 1 if you have gettext and don't want to use GNU gettext. */ +/* #undef HAVE_GETTEXT */ + +/* Define if malloc is not declared in system header files. */ +/* #undef NEED_DECLARATION_MALLOC */ + +/* Define if realloc is not declared in system header files. */ +/* #undef NEED_DECLARATION_REALLOC */ + +/* Define if free is not declared in system header files. */ +/* #undef NEED_DECLARATION_FREE */ + +/* Define if strerror is not declared in system header files. */ +/* #undef NEED_DECLARATION_STRERROR */ + +/* Define if strdup is not declared in system header files. */ +/* #undef NEED_DECLARATION_STRDUP */ + +/* Define if has pstatus_t. */ +/* #undef HAVE_PSTATUS_T */ + +/* Define if has prrun_t. */ +/* #undef HAVE_PRRUN_T */ + +/* Define if has gregset_t. */ +#define HAVE_GREGSET_T 1 + +/* Define if has fpregset_t. */ +#define HAVE_FPREGSET_T 1 + diff --git a/gnu/usr.bin/binutils214/gdb/freebsd-uthread.c b/gnu/usr.bin/binutils214/gdb/freebsd-uthread.c new file mode 100644 index 0000000000..bcb004f19e --- /dev/null +++ b/gnu/usr.bin/binutils214/gdb/freebsd-uthread.c @@ -0,0 +1,1072 @@ +/* Low level interface for debugging FreeBSD user threads for GDB, the GNU debugger. + Copyright 1996, 1999 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. */ + +/* This module implements a sort of half target that sits between the + machine-independent parts of GDB and the ptrace interface (infptrace.c) to + provide access to the FreeBSD user-mode thread implementation. + + FreeBSD threads are true user-mode threads, which are invoked via + the pthread_* interfaces. These are mostly implemented in + user-space, with all thread context kept in various structures that + live in the user's heap. For the most part, the kernel has no + knowlege of these threads. + + Based largely on hpux-thread.c + + */ + +/* + * $FreeBSD: src/gnu/usr.bin/binutils/gdb/freebsd-uthread.c,v 1.3.2.4 2003/01/06 11:28:54 fjoe Exp $ + * $DragonFly: src/gnu/usr.bin/binutils214/gdb/Attic/freebsd-uthread.c,v 1.1 2004/02/01 08:53:04 dillon Exp $ + */ + +#include "defs.h" +#include +#include +#include +#include "gdbthread.h" +#include "target.h" +#include "inferior.h" +#include +#include +#include +#include "gdbcore.h" + +extern int child_suppress_run; +extern struct target_ops child_ops; /* target vector for inftarg.c */ + +extern void _initialize_freebsd_uthread PARAMS ((void)); + +static int main_pid = -1; /* Real process ID */ + +/* Set to true while we are part-way through attaching */ +static int freebsd_uthread_attaching; + +static int freebsd_uthread_active = 0; +static CORE_ADDR P_thread_list; +static CORE_ADDR P_thread_run; + +static struct cleanup * save_inferior_pid PARAMS ((void)); + +static void restore_inferior_pid PARAMS ((int pid)); + +static void freebsd_uthread_resume PARAMS ((int pid, int step, + enum target_signal signo)); + +static void init_freebsd_uthread_ops PARAMS ((void)); + +static struct target_ops freebsd_uthread_ops; +static struct target_thread_vector freebsd_uthread_vec; + +/* + +LOCAL FUNCTION + + save_inferior_pid - Save inferior_pid on the cleanup list + restore_inferior_pid - Restore inferior_pid from the cleanup list + +SYNOPSIS + + struct cleanup *save_inferior_pid () + void restore_inferior_pid (int pid) + +DESCRIPTION + + These two functions act in unison to restore inferior_pid in + case of an error. + +NOTES + + inferior_pid is a global variable that needs to be changed by many of + these routines before calling functions in procfs.c. In order to + guarantee that inferior_pid gets restored (in case of errors), you + need to call save_inferior_pid before changing it. At the end of the + function, you should invoke do_cleanups to restore it. + + */ + +static struct cleanup * +save_inferior_pid () +{ + return make_cleanup ((make_cleanup_func) restore_inferior_pid, + (void *)(intptr_t) inferior_pid); +} + +static void +restore_inferior_pid (pid) + int pid; +{ + inferior_pid = pid; +} + +static int find_active_thread PARAMS ((void)); + +struct cached_pthread { + u_int64_t uniqueid; + int state; + CORE_ADDR name; + union { + ucontext_t uc; + jmp_buf jb; + } ctx; +}; + +static int cached_thread; +static struct cached_pthread cached_pthread; +static CORE_ADDR cached_pthread_addr; + +#define THREADID_TID(id) ((id) >> 17) +#define THREADID_PID(id) ((id) & ((1 << 17) - 1)) + +LIST_HEAD(idmaplist, idmap); + +struct idmap { + LIST_ENTRY(idmap) link; + u_int64_t uniqueid; + int tid; +}; + +#define MAPHASH_SIZE 257 +#define TID_MIN 1 +#define TID_MAX 16383 + +static int tid_to_hash[TID_MAX + 1]; /* set to map_hash index */ +static struct idmaplist map_hash[MAPHASH_SIZE]; +static int next_free_tid = TID_MIN; /* first available tid */ +static int last_free_tid = TID_MIN; /* first unavailable */ + +static CORE_ADDR P_thread_next_offset; +static CORE_ADDR P_thread_uniqueid_offset; +static CORE_ADDR P_thread_state_offset; +static CORE_ADDR P_thread_name_offset; +static CORE_ADDR P_thread_ctx_offset; +static CORE_ADDR P_thread_PS_RUNNING_value; +static CORE_ADDR P_thread_PS_DEAD_value; + +static int next_offset; +static int uniqueid_offset; +static int state_offset; +static int name_offset; +static int ctx_offset; +static int PS_RUNNING_value; +static int PS_DEAD_value; + +#define UNIQUEID_HASH(id) (id % MAPHASH_SIZE) +#define TID_ADD1(tid) (((tid) + 1) == TID_MAX + 1 \ + ? TID_MIN : (tid) + 1) +#define IS_TID_FREE(tid) (tid_to_hash[tid] == -1) + +static int +get_new_tid(h) + int h; +{ + int tid = next_free_tid; + + tid_to_hash[tid] = h; + next_free_tid = TID_ADD1(next_free_tid); + if (next_free_tid == last_free_tid) + { + int i; + + for (i = last_free_tid; TID_ADD1(i) != last_free_tid; i = TID_ADD1(i)) + if (IS_TID_FREE(i)) + break; + if (TID_ADD1(i) == last_free_tid) + { + error("too many threads"); + return 0; + } + next_free_tid = i; + for (i = TID_ADD1(i); IS_TID_FREE(i); i = TID_ADD1(i)) + ; + last_free_tid = i; + } + + return tid; +} + +static int +find_pid(uniqueid) + u_int64_t uniqueid; +{ + int h = UNIQUEID_HASH(uniqueid); + struct idmap *im; + + LIST_FOREACH(im, &map_hash[h], link) + if (im->uniqueid == uniqueid) + return (im->tid << 17) + main_pid; + + im = xmalloc(sizeof(struct idmap)); + im->uniqueid = uniqueid; + im->tid = get_new_tid(h); + LIST_INSERT_HEAD(&map_hash[h], im, link); + + return (im->tid << 17) + main_pid; +} + +static void +free_pid(pid) + int pid; +{ + int tid = THREADID_TID(pid); + int h = tid_to_hash[tid]; + struct idmap *im; + + if (!tid) return; + + LIST_FOREACH(im, &map_hash[h], link) + if (im->tid == tid) + break; + + if (!im) return; + + LIST_REMOVE(im, link); + tid_to_hash[tid] = -1; + free(im); +} + +#define READ_OFFSET(field) read_memory(P_thread_##field##_offset, \ + (char *) &field##_offset, \ + sizeof(field##_offset)) + +#define READ_VALUE(name) read_memory(P_thread_##name##_value, \ + (char *) &name##_value, \ + sizeof(name##_value)) + +static void +read_thread_offsets () +{ + READ_OFFSET(next); + READ_OFFSET(uniqueid); + READ_OFFSET(state); + READ_OFFSET(name); + READ_OFFSET(ctx); + + READ_VALUE(PS_RUNNING); + READ_VALUE(PS_DEAD); +} + +#define READ_FIELD(ptr, T, field, result) \ + read_memory ((ptr) + field##_offset, (char *) &(result), sizeof result) + +static u_int64_t +read_pthread_uniqueid (ptr) + CORE_ADDR ptr; +{ + u_int64_t uniqueid; + READ_FIELD(ptr, u_int64_t, uniqueid, uniqueid); + return uniqueid; +} + +static CORE_ADDR +read_pthread_next (ptr) + CORE_ADDR ptr; +{ + CORE_ADDR next; + READ_FIELD(ptr, CORE_ADDR, next, next); + return next; +} + +static void +read_cached_pthread (ptr, cache) + CORE_ADDR ptr; + struct cached_pthread *cache; +{ + READ_FIELD(ptr, u_int64_t, uniqueid, cache->uniqueid); + READ_FIELD(ptr, int, state, cache->state); + READ_FIELD(ptr, CORE_ADDR, name, cache->name); + READ_FIELD(ptr, ucontext_t, ctx, cache->ctx); +} + +static int +find_active_thread () +{ + CORE_ADDR ptr; + + if (main_pid == -1) + return -1; + + read_memory ((CORE_ADDR)P_thread_run, + (char *)&ptr, + sizeof ptr); + + return find_pid(read_pthread_uniqueid(ptr)); +} + +static CORE_ADDR find_pthread_addr PARAMS ((int thread)); +static struct cached_pthread * find_pthread PARAMS ((int thread)); + +static CORE_ADDR +find_pthread_addr (thread) + int thread; +{ + CORE_ADDR ptr; + + if (thread == cached_thread) + return cached_pthread_addr; + + read_memory ((CORE_ADDR)P_thread_list, + (char *)&ptr, + sizeof ptr); + + while (ptr != 0) + { + if (find_pid(read_pthread_uniqueid(ptr)) == thread) + { + cached_thread = thread; + cached_pthread_addr = ptr; + read_cached_pthread(ptr, &cached_pthread); + return ptr; + } + ptr = read_pthread_next(ptr); + } + + return NULL; +} + +static struct cached_pthread * +find_pthread (thread) + int thread; +{ + CORE_ADDR ptr; + + if (thread == cached_thread) + return &cached_pthread; + + read_memory ((CORE_ADDR)P_thread_list, + (char *)&ptr, + sizeof ptr); + + while (ptr != 0) + { + if (find_pid(read_pthread_uniqueid(ptr)) == thread) + { + cached_thread = thread; + cached_pthread_addr = ptr; + read_cached_pthread(ptr, &cached_pthread); + return &cached_pthread; + } + ptr = read_pthread_next(ptr); + } + +#if 0 + error ("Can't find pthread %d,%d", + THREADID_TID(thread), THREADID_PID(thread)); +#endif + return NULL; +} + + +/* Most target vector functions from here on actually just pass through to + inftarg.c, as they don't need to do anything specific for threads. */ + +/* ARGSUSED */ +static void +freebsd_uthread_open (arg, from_tty) + char *arg; + int from_tty; +{ + child_ops.to_open (arg, from_tty); +} + +/* Attach to process PID, then initialize for debugging it + and wait for the trace-trap that results from attaching. */ + +static void +freebsd_uthread_attach (args, from_tty) + char *args; + int from_tty; +{ + child_ops.to_attach (args, from_tty); + push_target (&freebsd_uthread_ops); + freebsd_uthread_attaching = 1; +} + +/* After an attach, see if the target is threaded */ + +static void +freebsd_uthread_post_attach (pid) + int pid; +{ + if (freebsd_uthread_active) + { + read_thread_offsets (); + + main_pid = pid; + + bind_target_thread_vector (&freebsd_uthread_vec); + + inferior_pid = find_active_thread (); + + add_thread (inferior_pid); + } + else + { + unpush_target (&freebsd_uthread_ops); + push_target (&child_ops); + } + + freebsd_uthread_attaching = 0; +} + +/* Take a program previously attached to and detaches it. + The program resumes execution and will no longer stop + on signals, etc. We'd better not have left any breakpoints + in the program or it'll die when it hits one. For this + to work, it may be necessary for the process to have been + previously attached. It *might* work if the program was + started via the normal ptrace (PTRACE_TRACEME). */ + +static void +freebsd_uthread_detach (args, from_tty) + char *args; + int from_tty; +{ + child_ops.to_detach (args, from_tty); +} + +/* Resume execution of process PID. If STEP is nozero, then + just single step it. If SIGNAL is nonzero, restart it with that + signal activated. We may have to convert pid from a thread-id to an LWP id + for procfs. */ + +static void +freebsd_uthread_resume (pid, step, signo) + int pid; + int step; + enum target_signal signo; +{ + struct cleanup *old_chain; + + if (freebsd_uthread_attaching) + { + child_ops.to_resume (pid, step, signo); + return; + } + + old_chain = save_inferior_pid (); + + pid = inferior_pid = main_pid; + + child_ops.to_resume (pid, step, signo); + + cached_thread = 0; + + do_cleanups (old_chain); +} + +/* Wait for any threads to stop. We may have to convert PID from a thread id + to a LWP id, and vice versa on the way out. */ + +static int +freebsd_uthread_wait (pid, ourstatus) + int pid; + struct target_waitstatus *ourstatus; +{ + int rtnval; + struct cleanup *old_chain; + + if (freebsd_uthread_attaching) + { + return child_ops.to_wait (pid, ourstatus); + } + + old_chain = save_inferior_pid (); + + inferior_pid = main_pid; + + if (pid != -1) + pid = main_pid; + + rtnval = child_ops.to_wait (pid, ourstatus); + + if (rtnval >= 0) + { + rtnval = find_active_thread (); + if (!in_thread_list (rtnval)) + add_thread (rtnval); + } + + do_cleanups (old_chain); + + return rtnval; +} + +#ifdef __i386__ + +static char jmpmap[NUM_REGS] = /* map reg to jmp_buf */ +{ + 6, /* eax */ + -1, /* ecx */ + -1, /* edx */ + 1, /* ebx */ + 2, /* esp */ + 3, /* ebp */ + 4, /* esi */ + 5, /* edi */ + 0, /* eip */ + -1, /* eflags */ + -1, /* cs */ + -1, /* ss */ + -1, /* ds */ + -1, /* es */ + -1, /* fs */ + -1, /* gs */ +}; + +#endif + +#ifdef __alpha__ + +static char jmpmap[NUM_REGS] = { + 4, 5, 6, 7, 8, 9, 10, 11, /* v0 - t6 */ + 12, 13, 14, 15, 16, 17, 18, 19, /* t7 - fp */ + 20, 21, 22, 23, 24, 25, 26, 27, /* a0 - t9 */ + 28, 29, 30, 31, 32, 33, 34, 35, /* t10 - zero */ + 37, 38, 39, 40, 41, 42, 43, 44, /* f0 - f7 */ + 45, 46, 47, 48, 49, 50, 51, 52, /* f8 - f15 */ + 53, 54, 55, 56, 57, 58, 59, 60, /* f16 - f23 */ + 61, 62, 63, 64, 65, 66, 67, 68, /* f24 - f31 */ + 2, -1, /* pc, vfp */ +}; + +#endif + +static void +freebsd_uthread_fetch_registers (regno) + int regno; +{ + struct cached_pthread *thread; + struct cleanup *old_chain; + int active; + int first_regno, last_regno; + register_t *regbase; + char *regmap; + + if (freebsd_uthread_attaching) + { + child_ops.to_fetch_registers (regno); + return; + } + + thread = find_pthread (inferior_pid); + + old_chain = save_inferior_pid (); + + active = (inferior_pid == find_active_thread()); + + inferior_pid = main_pid; + + if (active) + { + child_ops.to_fetch_registers (regno); + + do_cleanups (old_chain); + + return; + } + + if (regno == -1) + { + first_regno = 0; + last_regno = NUM_REGS - 1; + } + else + { + first_regno = regno; + last_regno = regno; + } + + regbase = (register_t*) &thread->ctx.jb[0]; + regmap = jmpmap; + + for (regno = first_regno; regno <= last_regno; regno++) + { + if (regmap[regno] == -1) + child_ops.to_fetch_registers (regno); + else + supply_register (regno, (char*) ®base[regmap[regno]]); + } + + do_cleanups (old_chain); +} + +static void +freebsd_uthread_store_registers (regno) + int regno; +{ + struct cached_pthread *thread; + CORE_ADDR ptr; + struct cleanup *old_chain; + int first_regno, last_regno; + u_int32_t *regbase; + char *regmap; + + if (freebsd_uthread_attaching) + { + child_ops.to_store_registers (regno); + return; + } + + thread = find_pthread (inferior_pid); + + old_chain = save_inferior_pid (); + + inferior_pid = main_pid; + + if (thread->state == PS_RUNNING_value) + { + child_ops.to_store_registers (regno); + + do_cleanups (old_chain); + + return; + } + + if (regno == -1) + { + first_regno = 0; + last_regno = NUM_REGS - 1; + } + else + { + first_regno = regno; + last_regno = regno; + } + + regbase = (u_int32_t*) &thread->ctx.jb[0]; + regmap = jmpmap; + + ptr = find_pthread_addr (inferior_pid); + for (regno = first_regno; regno <= last_regno; regno++) + { + if (regmap[regno] == -1) + child_ops.to_store_registers (regno); + else + { + u_int32_t *reg = ®base[regmap[regno]]; + int off; + + /* Hang onto cached value */ + memcpy(reg, registers + REGISTER_BYTE (regno), + REGISTER_RAW_SIZE (regno)); + + /* And push out to inferior */ + off = (char *) reg - (char *) thread; + write_memory (ptr + off, + registers + REGISTER_BYTE (regno), + REGISTER_RAW_SIZE (regno)); + } + } + + do_cleanups (old_chain); +} + +/* Get ready to modify the registers array. On machines which store + individual registers, this doesn't need to do anything. On machines + which store all the registers in one fell swoop, this makes sure + that registers contains all the registers from the program being + debugged. */ + +static void +freebsd_uthread_prepare_to_store () +{ + struct cleanup *old_chain; + + if (freebsd_uthread_attaching) + { + child_ops.to_prepare_to_store (); + return; + } + + old_chain = save_inferior_pid (); + inferior_pid = main_pid; + + child_ops.to_prepare_to_store (); + + do_cleanups (old_chain); +} + +static int +freebsd_uthread_xfer_memory (memaddr, myaddr, len, dowrite, target) + CORE_ADDR memaddr; + char *myaddr; + int len; + int dowrite; + struct target_ops *target; /* ignored */ +{ + int retval; + struct cleanup *old_chain; + + if (freebsd_uthread_attaching) + { + return child_ops.to_xfer_memory (memaddr, myaddr, len, dowrite, target); + } + + old_chain = save_inferior_pid (); + + inferior_pid = main_pid; + + retval = child_ops.to_xfer_memory (memaddr, myaddr, len, dowrite, target); + + do_cleanups (old_chain); + + return retval; +} + +/* Print status information about what we're accessing. */ + +static void +freebsd_uthread_files_info (ignore) + struct target_ops *ignore; +{ + child_ops.to_files_info (ignore); +} + +static void +freebsd_uthread_kill_inferior () +{ + inferior_pid = main_pid; + child_ops.to_kill (); +} + +static void +freebsd_uthread_notice_signals (pid) + int pid; +{ + struct cleanup *old_chain; + old_chain = save_inferior_pid (); + inferior_pid = main_pid; + + child_ops.to_notice_signals (pid); + + do_cleanups (old_chain); +} + +/* Fork an inferior process, and start debugging it with /proc. */ + +static void +freebsd_uthread_create_inferior (exec_file, allargs, env) + char *exec_file; + char *allargs; + char **env; +{ + child_ops.to_create_inferior (exec_file, allargs, env); + + if (inferior_pid && freebsd_uthread_active) + { + read_thread_offsets (); + + main_pid = inferior_pid; + + push_target (&freebsd_uthread_ops); + bind_target_thread_vector (&freebsd_uthread_vec); + + inferior_pid = find_active_thread (); + + add_thread (inferior_pid); + } +} + +/* This routine is called to find out if the inferior is using threads. + We check for the _thread_run and _thread_list globals. */ + +void +freebsd_uthread_new_objfile (objfile) + struct objfile *objfile; +{ + struct minimal_symbol *ms; + + if (!objfile) + { + freebsd_uthread_active = 0; + return; + } + + ms = lookup_minimal_symbol ("_thread_run", NULL, objfile); + + if (!ms) + return; + + P_thread_run = SYMBOL_VALUE_ADDRESS (ms); + + ms = lookup_minimal_symbol ("_thread_list", NULL, objfile); + + if (!ms) + return; + + P_thread_list = SYMBOL_VALUE_ADDRESS (ms); + +#define OFFSET_SYM(field) "_thread_" #field "_offset" +#define LOOKUP_OFFSET(field) \ + do { \ + ms = lookup_minimal_symbol (OFFSET_SYM(field), NULL, objfile); \ + if (!ms) \ + return; \ + P_thread_##field##_offset = SYMBOL_VALUE_ADDRESS (ms); \ + } while (0); + +#define VALUE_SYM(name) "_thread_" #name "_value" +#define LOOKUP_VALUE(name) \ + do { \ + ms = lookup_minimal_symbol (VALUE_SYM(name), NULL, objfile); \ + if (!ms) \ + return; \ + P_thread_##name##_value = SYMBOL_VALUE_ADDRESS (ms); \ + } while (0); + + LOOKUP_OFFSET(next); + LOOKUP_OFFSET(uniqueid); + LOOKUP_OFFSET(state); + LOOKUP_OFFSET(name); + LOOKUP_OFFSET(ctx); + + LOOKUP_VALUE(PS_RUNNING); + LOOKUP_VALUE(PS_DEAD); + + freebsd_uthread_active = 1; +} + +int +freebsd_uthread_has_exited (pid, wait_status, exit_status) + int pid; + int wait_status; + int * exit_status; +{ + int t = child_ops.to_has_exited (pid, wait_status, exit_status); + if (t) + main_pid = -1; + return t; +} + +/* Clean up after the inferior dies. */ + +static void +freebsd_uthread_mourn_inferior () +{ + inferior_pid = main_pid; /* don't bother to restore inferior_pid */ + child_ops.to_mourn_inferior (); + unpush_target (&freebsd_uthread_ops); +} + +/* Mark our target-struct as eligible for stray "run" and "attach" commands. */ + +static int +freebsd_uthread_can_run () +{ + return child_suppress_run; +} + +static int +freebsd_uthread_thread_alive (pid) + int pid; +{ + struct cleanup *old_chain; + struct cached_pthread *thread; + int ret = 0; + + if (freebsd_uthread_attaching) + return 1; + + /* + * We can get called from child_ops.to_wait() which passes the underlying + * pid (without a thread number). + */ + if (THREADID_TID(pid) == 0) + return 1; + + old_chain = save_inferior_pid (); + inferior_pid = main_pid; + + if (find_pthread_addr (pid) != 0) + { + thread = find_pthread (pid); + ret = (thread->state != PS_DEAD_value); + } + + do_cleanups (old_chain); + + if (!ret) + free_pid(pid); + + return ret; +} + +static void +freebsd_uthread_stop () +{ + struct cleanup *old_chain; + old_chain = save_inferior_pid (); + inferior_pid = main_pid; + + child_ops.to_stop (); + + do_cleanups (old_chain); +} + +static int +freebsd_uthread_find_new_threads () +{ + CORE_ADDR ptr; + int state; + u_int64_t uniqueid; + struct cleanup *old_chain; + + old_chain = save_inferior_pid (); + inferior_pid = main_pid; + + read_memory ((CORE_ADDR)P_thread_list, + (char *)&ptr, + sizeof ptr); + + while (ptr != 0) + { + READ_FIELD(ptr, int, state, state); + READ_FIELD(ptr, u_int64_t, uniqueid, uniqueid); + if (state != PS_DEAD_value && + !in_thread_list (find_pid(uniqueid))) + add_thread (find_pid(uniqueid)); + ptr = read_pthread_next(ptr); + } + + do_cleanups (old_chain); + + return 0; +} + +/* MUST MATCH enum pthread_state */ +static const char *statenames[] = { + "RUNNING", + "SIGTHREAD", + "MUTEX_WAIT", + "COND_WAIT", + "FDLR_WAIT", + "FDLW_WAIT", + "FDR_WAIT", + "FDW_WAIT", + "POLL_WAIT", + "FILE_WAIT", + "SELECT_WAIT", + "SLEEP_WAIT", + "WAIT_WAIT", + "SIGSUSPEND", + "SIGWAIT", + "SPINBLOCK", + "JOIN", + "SUSPENDED", + "DEAD", + "DEADLOCK", +}; + +static int +freebsd_uthread_get_thread_info (ref, selection, info) + gdb_threadref *ref; + int selection; + struct gdb_ext_thread_info *info; +{ + int pid = *ref; + struct cached_pthread *thread = find_pthread (pid); + struct cleanup *old_chain; + + old_chain = save_inferior_pid (); + inferior_pid = main_pid; + + memset(&info->threadid, 0, OPAQUETHREADBYTES); + + memcpy(&info->threadid, ref, sizeof *ref); + info->active = thread->state == PS_RUNNING_value; + strcpy(info->display, statenames[thread->state]); + if (thread->name) + read_memory ((CORE_ADDR) thread->name, info->shortname, 32); + else + strcpy(info->shortname, ""); + + do_cleanups (old_chain); + return (0); +} + +char * +freebsd_uthread_pid_to_str (pid) + int pid; +{ + static char buf[30]; + + if (STREQ (current_target.to_shortname, "freebsd-uthreads")) + sprintf (buf, "process %d, thread %d\0", + THREADID_PID(pid), THREADID_TID(pid)); + else + sprintf (buf, "process %d\0", pid); + + return buf; +} + + +static void +init_freebsd_uthread_ops () +{ + freebsd_uthread_ops.to_shortname = "freebsd-uthreads"; + freebsd_uthread_ops.to_longname = "FreeBSD uthreads"; + freebsd_uthread_ops.to_doc = "FreeBSD user threads support."; + freebsd_uthread_ops.to_open = freebsd_uthread_open; + freebsd_uthread_ops.to_attach = freebsd_uthread_attach; + freebsd_uthread_ops.to_post_attach = freebsd_uthread_post_attach; + freebsd_uthread_ops.to_detach = freebsd_uthread_detach; + freebsd_uthread_ops.to_resume = freebsd_uthread_resume; + freebsd_uthread_ops.to_wait = freebsd_uthread_wait; + freebsd_uthread_ops.to_fetch_registers = freebsd_uthread_fetch_registers; + freebsd_uthread_ops.to_store_registers = freebsd_uthread_store_registers; + freebsd_uthread_ops.to_prepare_to_store = freebsd_uthread_prepare_to_store; + freebsd_uthread_ops.to_xfer_memory = freebsd_uthread_xfer_memory; + freebsd_uthread_ops.to_files_info = freebsd_uthread_files_info; + freebsd_uthread_ops.to_insert_breakpoint = memory_insert_breakpoint; + freebsd_uthread_ops.to_remove_breakpoint = memory_remove_breakpoint; + freebsd_uthread_ops.to_terminal_init = terminal_init_inferior; + freebsd_uthread_ops.to_terminal_inferior = terminal_inferior; + freebsd_uthread_ops.to_terminal_ours_for_output = terminal_ours_for_output; + freebsd_uthread_ops.to_terminal_ours = terminal_ours; + freebsd_uthread_ops.to_terminal_info = child_terminal_info; + freebsd_uthread_ops.to_kill = freebsd_uthread_kill_inferior; + freebsd_uthread_ops.to_create_inferior = freebsd_uthread_create_inferior; + freebsd_uthread_ops.to_has_exited = freebsd_uthread_has_exited; + freebsd_uthread_ops.to_mourn_inferior = freebsd_uthread_mourn_inferior; + freebsd_uthread_ops.to_can_run = freebsd_uthread_can_run; + freebsd_uthread_ops.to_notice_signals = freebsd_uthread_notice_signals; + freebsd_uthread_ops.to_thread_alive = freebsd_uthread_thread_alive; + freebsd_uthread_ops.to_stop = freebsd_uthread_stop; + freebsd_uthread_ops.to_stratum = process_stratum; + freebsd_uthread_ops.to_has_all_memory = 1; + freebsd_uthread_ops.to_has_memory = 1; + freebsd_uthread_ops.to_has_stack = 1; + freebsd_uthread_ops.to_has_registers = 1; + freebsd_uthread_ops.to_has_execution = 1; + freebsd_uthread_ops.to_has_thread_control = 0; + freebsd_uthread_ops.to_magic = OPS_MAGIC; + + freebsd_uthread_vec.find_new_threads = freebsd_uthread_find_new_threads; + freebsd_uthread_vec.get_thread_info = freebsd_uthread_get_thread_info; +} + +void +_initialize_freebsd_uthread () +{ + init_freebsd_uthread_ops (); + add_target (&freebsd_uthread_ops); + + child_suppress_run = 1; +} diff --git a/gnu/usr.bin/binutils214/gdb/gdb.1 b/gnu/usr.bin/binutils214/gdb/gdb.1 new file mode 100644 index 0000000000..2fad8b9e8c --- /dev/null +++ b/gnu/usr.bin/binutils214/gdb/gdb.1 @@ -0,0 +1,386 @@ +.\" Copyright (c) 1991 Free Software Foundation +.\" See section COPYING for conditions for redistribution +.\" $FreeBSD: src/gnu/usr.bin/binutils/gdb/gdb.1,v 1.7 1999/08/27 23:34:49 peter Exp $ +.\" $DragonFly: src/gnu/usr.bin/binutils214/gdb/Attic/gdb.1,v 1.1 2004/02/01 08:53:04 dillon Exp $ +.TH gdb 1 "4nov1991" "GNU Tools" "GNU Tools" +.SH NAME +gdb \- The GNU Debugger +.SH SYNOPSIS +.na +.TP +.B gdb +.RB "[\|" \-help "\|]" +.RB "[\|" \-nx "\|]" +.RB "[\|" \-q "\|]" +.RB "[\|" \-batch "\|]" +.RB "[\|" \-cd=\c +.I dir\c +\|] +.RB "[\|" \-f "\|]" +.RB "[\|" \-k "\|]" +.RB "[\|" \-wcore "\|]" +.RB "[\|" "\-b\ "\c +.IR bps "\|]" +.RB "[\|" "\-tty="\c +.IR dev "\|]" +.RB "[\|" "\-s "\c +.I symfile\c +\&\|] +.RB "[\|" "\-e "\c +.I prog\c +\&\|] +.RB "[\|" "\-se "\c +.I prog\c +\&\|] +.RB "[\|" "\-c "\c +.I core\c +\&\|] +.RB "[\|" "\-x "\c +.I cmds\c +\&\|] +.RB "[\|" "\-d "\c +.I dir\c +\&\|] +.RB "[\|" \c +.I prog\c +.RB "[\|" \c +.IR core \||\| procID\c +\&\|]\&\|] +.ad b +.SH DESCRIPTION +The purpose of a debugger such as GDB is to allow you to see what is +going on ``inside'' another program while it executes\(em\&or what another +program was doing at the moment it crashed. + +GDB can do four main kinds of things (plus other things in support of +these) to help you catch bugs in the act: + +.TP +\ \ \ \(bu +Start your program, specifying anything that might affect its behavior. + +.TP +\ \ \ \(bu +Make your program stop on specified conditions. + +.TP +\ \ \ \(bu +Examine what has happened, when your program has stopped. + +.TP +\ \ \ \(bu +Change things in your program, so you can experiment with correcting the +effects of one bug and go on to learn about another. +.PP + +You can use GDB to debug programs written in C, C++, and Modula-2. +Fortran support will be added when a GNU Fortran compiler is ready. + +GDB is invoked with the shell command \c +.B gdb\c +\&. Once started, it reads +commands from the terminal until you tell it to exit with the GDB +command \c +.B quit\c +\&. You can get online help from \c +.B gdb\c +\& itself +by using the command \c +.B help\c +\&. + +You can run \c +.B gdb\c +\& with no arguments or options; but the most +usual way to start GDB is with one argument or two, specifying an +executable program as the argument: +.sp +.br +gdb\ program +.br +.sp + +You can also start with both an executable program and a core file specified: +.sp +.br +gdb\ program\ core +.br +.sp + +You can, instead, specify a process ID as a second argument, if you want +to debug a running process: +.sp +.br +gdb\ program\ 1234 +.br +.sp + +would attach GDB to process \c +.B 1234\c +\& (unless you also have a file +named `\|\c +.B 1234\c +\&\|'; GDB does check for a core file first). + +Here are some of the most frequently needed GDB commands: +.TP +.B break \fR[\|\fIfile\fB:\fR\|]\fIfunction +\& +Set a breakpoint at \c +.I function\c +\& (in \c +.I file\c +\&). +.TP +.B run \fR[\|\fIarglist\fR\|] +Start your program (with \c +.I arglist\c +\&, if specified). +.TP +.B bt +Backtrace: display the program stack. +.TP +.BI print " expr"\c +\& +Display the value of an expression. +.TP +.B c +Continue running your program (after stopping, e.g. at a breakpoint). +.TP +.B next +Execute next program line (after stopping); step \c +.I over\c +\& any +function calls in the line. +.TP +.B step +Execute next program line (after stopping); step \c +.I into\c +\& any +function calls in the line. +.TP +.B help \fR[\|\fIname\fR\|] +Show information about GDB command \c +.I name\c +\&, or general information +about using GDB. +.TP +.B quit +Exit from GDB. +.PP +For full details on GDB, see \c +.I +Using GDB: A Guide to the GNU Source-Level Debugger\c +\&, by Richard M. Stallman and Roland H. Pesch. The same text is available online +as the \c +.B gdb\c +\& entry in the \c +.B info\c +\& program. +.SH OPTIONS +Any arguments other than options specify an executable +file and core file (or process ID); that is, the first argument +encountered with no +associated option flag is equivalent to a `\|\c +.B \-se\c +\&\|' option, and the +second, if any, is equivalent to a `\|\c +.B \-c\c +\&\|' option if it's the name of a file. Many options have +both long and short forms; both are shown here. The long forms are also +recognized if you truncate them, so long as enough of the option is +present to be unambiguous. (If you prefer, you can flag option +arguments with `\|\c +.B +\c +\&\|' rather than `\|\c +.B \-\c +\&\|', though we illustrate the +more usual convention.) + +All the options and command line arguments you give are processed +in sequential order. The order makes a difference when the +`\|\c +.B \-x\c +\&\|' option is used. + +.TP +.B \-help +.TP +.B \-h +List all options, with brief explanations. + +.TP +.BI "\-symbols=" "file"\c +.TP +.BI "\-s " "file"\c +\& +Read symbol table from file \c +.I file\c +\&. + +.TP +.BI "\-exec=" "file"\c +.TP +.BI "\-e " "file"\c +\& +Use file \c +.I file\c +\& as the executable file to execute when +appropriate, and for examining pure data in conjunction with a core +dump. + +.TP +.BI "\-se=" "file"\c +\& +Read symbol table from file \c +.I file\c +\& and use it as the executable +file. + +.TP +.BI "\-core=" "file"\c +.TP +.BI "\-c " "file"\c +\& +Use file \c +.I file\c +\& as a core dump to examine. + +.TP +.BI "\-command=" "file"\c +.TP +.BI "\-x " "file"\c +\& +Execute GDB commands from file \c +.I file\c +\&. + +.TP +.BI "\-directory=" "directory"\c +.TP +.BI "\-d " "directory"\c +\& +Add \c +.I directory\c +\& to the path to search for source files. +.PP + +.TP +.B \-nx +.TP +.B \-n +Do not execute commands from any `\|\c +.B .gdbinit\c +\&\|' initialization files. +Normally, the commands in these files are executed after all the +command options and arguments have been processed. + + +.TP +.B \-quiet +.TP +.B \-q +``Quiet''. Do not print the introductory and copyright messages. These +messages are also suppressed in batch mode. + +.TP +.B \-batch +Run in batch mode. Exit with status \c +.B 0\c +\& after processing all the command +files specified with `\|\c +.B \-x\c +\&\|' (and `\|\c +.B .gdbinit\c +\&\|', if not inhibited). +Exit with nonzero status if an error occurs in executing the GDB +commands in the command files. + +Batch mode may be useful for running GDB as a filter, for example to +download and run a program on another computer; in order to make this +more useful, the message +.sp +.br +Program\ exited\ normally. +.br +.sp + +(which is ordinarily issued whenever a program running under GDB control +terminates) is not issued when running in batch mode. + +.TP +.BI "\-cd=" "directory"\c +\& +Run GDB using \c +.I directory\c +\& as its working directory, +instead of the current directory. + +.TP +.B \-fullname +.TP +.B \-f +Emacs sets this option when it runs GDB as a subprocess. It tells GDB +to output the full file name and line number in a standard, +recognizable fashion each time a stack frame is displayed (which +includes each time the program stops). This recognizable format looks +like two `\|\c +.B \032\c +\&\|' characters, followed by the file name, line number +and character position separated by colons, and a newline. The +Emacs-to-GDB interface program uses the two `\|\c +.B \032\c +\&\|' characters as +a signal to display the source code for the frame. + +.TP +.B \-kernel +.TP +.B \-k +Use gdb in kernel debugging mode. The prompt is set to ``(kgdb)''. + +.TP +.B \-wcore +This option may only be used in kernel debugging mode while +debugging a ``live'' kernel and makes the corefile (/dev/mem) +writable. + +.TP +.BI "\-b " "bps"\c +\& +Set the line speed (baud rate or bits per second) of any serial +interface used by GDB for remote debugging. + +.TP +.BI "\-tty=" "device"\c +\& +Run using \c +.I device\c +\& for your program's standard input and output. +.PP + +.SH "SEE ALSO" +.RB "`\|" gdb "\|'" +entry in +.B info\c +\&; +.I +Using GDB: A Guide to the GNU Source-Level Debugger\c +, Richard M. Stallman and Roland H. Pesch, July 1991. +.SH COPYING +Copyright (c) 1991 Free Software Foundation, Inc. +.PP +Permission is granted to make and distribute verbatim copies of +this manual provided the copyright notice and this permission notice +are preserved on all copies. +.PP +Permission is granted to copy and distribute modified versions of this +manual under the conditions for verbatim copying, provided that the +entire resulting derived work is distributed under the terms of a +permission notice identical to this one. +.PP +Permission is granted to copy and distribute translations of this +manual into another language, under the above conditions for modified +versions, except that this permission notice may be included in +translations approved by the Free Software Foundation instead of in +the original English. diff --git a/gnu/usr.bin/binutils214/gdb/i386/freebsd-nat.c b/gnu/usr.bin/binutils214/gdb/i386/freebsd-nat.c new file mode 100644 index 0000000000..bd920921b8 --- /dev/null +++ b/gnu/usr.bin/binutils214/gdb/i386/freebsd-nat.c @@ -0,0 +1,682 @@ +/* + * $FreeBSD: src/gnu/usr.bin/binutils/gdb/i386/freebsd-nat.c,v 1.21.4.4 2001/08/15 02:42:27 peter Exp $ + * $DragonFly: src/gnu/usr.bin/binutils214/gdb/i386/Attic/freebsd-nat.c,v 1.1 2004/02/01 08:53:04 dillon Exp $ + */ +/* 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 +#include +#include +#include +#include +#include +#include "gdbcore.h" +#include "value.h" +#include "inferior.h" + +#if defined(HAVE_GREGSET_T) || defined(HAVE_FPREGSET_T) +#include +#endif + +#define PCB_OFFSET (UPAGES * PAGE_SIZE - sizeof(struct pcb)) + +/* this table must line up with REGISTER_NAMES in tm-i386v.h */ +/* symbols like 'tEAX' come from */ +static int tregmap[] = +{ + tEAX, tECX, tEDX, tEBX, + tESP, tEBP, tESI, tEDI, + tEIP, tEFLAGS, tCS, tSS, + tDS, tES, tFS, tGS, +}; + +static struct save87 pcb_savefpu; + +void +fetch_inferior_registers (regno) + int regno; +{ + struct reg inferior_registers; /* ptrace order, not gcc/gdb order */ + int r; + + ptrace (PT_GETREGS, inferior_pid, + (PTRACE_ARG3_TYPE) &inferior_registers, 0); + + for (r = 0; r < NUM_REGS; r++) + memcpy (®isters[REGISTER_BYTE (r)], ((int *)&inferior_registers) + tregmap[r], 4); + + registers_fetched (); +} + +void +store_inferior_registers (regno) + int regno; +{ + struct reg inferior_registers; /* ptrace order, not gcc/gdb order */ + int r; + + for (r = 0; r < NUM_REGS; r++) + memcpy (((int *)&inferior_registers) + tregmap[r], ®isters[REGISTER_BYTE (r)], 4); + + ptrace (PT_SETREGS, inferior_pid, + (PTRACE_ARG3_TYPE) &inferior_registers, 0); +} + +/* Extract the register values out of the core file and store + them where `read_register' will find them. + Extract the floating point state out of the core file and store + it where `float_info' will find it. + + CORE_REG_SECT points to the register values themselves, read into memory. + CORE_REG_SIZE is the size of that area. + WHICH says which set of registers we are handling (0 = int, 2 = float + on machines where they are discontiguous). + REG_ADDR is the offset from u.u_ar0 to the register values relative to + core_reg_sect. This is used with old-fashioned core files to + locate the registers in a large upage-plus-stack ".reg" section. + Original upage address X is at location core_reg_sect+x+reg_addr. + */ + +static void +fetch_core_registers (core_reg_sect, core_reg_size, which, reg_addr) + char *core_reg_sect; + unsigned core_reg_size; + int which; + CORE_ADDR reg_addr; +{ + register int regno; + register int cregno; + register int addr; + int bad_reg = -1; + int offset; + struct user *tmp_uaddr; + + /* + * First get virtual address of user structure. Then calculate offset. + */ + + memcpy(&tmp_uaddr, + &((struct user *) core_reg_sect)->u_kproc.kp_proc.p_addr, + sizeof(tmp_uaddr)); + offset = -reg_addr - (int) tmp_uaddr; + + for (regno = 0; regno < NUM_REGS; regno++) + { + cregno = tregmap[regno]; + if (cregno == tGS) + addr = PCB_OFFSET + offsetof (struct pcb, pcb_gs); + else + addr = offset + 4 * cregno; + if (addr < 0 || addr >= core_reg_size) + { + if (bad_reg < 0) + bad_reg = regno; + } + else + { + supply_register (regno, core_reg_sect + addr); + } + } + if (bad_reg >= 0) + { + error ("Register %s not found in core file.", gdb_register_names[bad_reg]); + } + +#if __FreeBSD_version >= 440000 + addr = PCB_OFFSET + offsetof (struct pcb, pcb_save); +#else + addr = PCB_OFFSET + offsetof (struct pcb, pcb_savefpu); +#endif + memcpy (&pcb_savefpu, core_reg_sect + addr, sizeof pcb_savefpu); +} + +#ifdef FLOAT_INFO +#include "expression.h" +#include "language.h" /* for local_hex_string */ +#include "floatformat.h" + +#include +#include +#include +#include + +#include + +#include +#include +#include +#define curpcb Xcurpcb /* XXX avoid leaking declaration from pcb.h */ +#include +#undef curpcb +#include +#include "gdb_stat.h" +#include + +extern void print_387_control_word (); /* i387-tdep.h */ +extern void print_387_status_word (); + +#define fpstate save87 +#if __FreeBSD_version >= 440000 +#define U_FPSTATE(u) (((struct pcb *)((char *)&u + PCB_OFFSET))->pcb_save.sv_87) +#else +#define U_FPSTATE(u) (((struct pcb *)((char *)&u + PCB_OFFSET))->pcb_savefpu) +#endif + +static void +i387_to_double (from, to) + char *from; + char *to; +{ + long *lp; + /* push extended mode on 387 stack, then pop in double mode + * + * first, set exception masks so no error is generated - + * number will be rounded to inf or 0, if necessary + */ + asm ("pushl %eax"); /* grab a stack slot */ + asm ("fstcw (%esp)"); /* get 387 control word */ + asm ("movl (%esp),%eax"); /* save old value */ + asm ("orl $0x3f,%eax"); /* mask all exceptions */ + asm ("pushl %eax"); + asm ("fldcw (%esp)"); /* load new value into 387 */ + + asm ("movl 8(%ebp),%eax"); + asm ("fldt (%eax)"); /* push extended number on 387 stack */ + asm ("fwait"); + asm ("movl 12(%ebp),%eax"); + asm ("fstpl (%eax)"); /* pop double */ + asm ("fwait"); + + asm ("popl %eax"); /* flush modified control word */ + asm ("fnclex"); /* clear exceptions */ + asm ("fldcw (%esp)"); /* restore original control word */ + asm ("popl %eax"); /* flush saved copy */ +} + +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]; +}; + +static void +print_387_status (status, ep) + unsigned short status; + struct env387 *ep; +{ + int i; + int bothstatus; + int top; + int fpreg; + + bothstatus = ((status != 0) && (ep->status != 0)); + if (status != 0) + { + if (bothstatus) + printf_unfiltered ("u: "); + print_387_status_word ((unsigned int)status); + } + + if (ep->status != 0) + { + if (bothstatus) + printf_unfiltered ("e: "); + print_387_status_word ((unsigned int)ep->status); + } + + print_387_control_word ((unsigned int)ep->control); + printf_unfiltered ("last instruction: "); + printf_unfiltered ("opcode %s; ", local_hex_string(ep->opcode)); + printf_unfiltered ("pc %s:", local_hex_string(ep->code_seg)); + printf_unfiltered ("%s; ", local_hex_string(ep->eip)); + printf_unfiltered ("operand %s", local_hex_string(ep->operand_seg)); + printf_unfiltered (":%s\n", local_hex_string(ep->operand)); + + top = (ep->status >> 11) & 7; + + printf_unfiltered (" regno tag msb lsb value\n"); + for (fpreg = 7; fpreg >= 0; fpreg--) + { + int exp; + int mantissa_or; + int normal; + char *sign; + int st_regno; + unsigned short *usregs; + double val; + + /* The physical regno `fpreg' is only relevant as an index into the + * tag word. Logical `%st' numbers are required for indexing ep->regs. + */ + st_regno = (fpreg + 8 - top) & 7; + + printf_unfiltered ("%%st(%d) %s ", st_regno, fpreg == top ? "=>" : " "); + + switch ((ep->tag >> (fpreg * 2)) & 3) + { + case 0: printf_unfiltered ("valid "); break; + case 1: printf_unfiltered ("zero "); break; + case 2: printf_unfiltered ("trap "); break; + case 3: printf_unfiltered ("empty "); break; + } + for (i = 9; i >= 0; i--) + printf_unfiltered ("%02x", ep->regs[st_regno][i]); + + printf_unfiltered (" "); + + /* + * Handle weird cases better than floatformat_to_double () and + * printf (). + */ + usregs = (unsigned short *) ep->regs[st_regno]; + sign = usregs[4] & 0x8000 ? "-" : ""; + exp = usregs[4] & 0x7fff; + normal = usregs[3] & 0x8000; + mantissa_or = usregs[0] | usregs[1] | usregs[2] | (usregs[3] & 0x7fff); + if (exp == 0) + { + if (normal) + printf_unfiltered ("Pseudo Denormal (0 as a double)"); + else if (mantissa_or == 0) + printf_unfiltered ("%s0", sign); + else + printf_unfiltered ("Denormal (0 as a double)"); + } + else if (exp == 0x7fff) + { + if (!normal) + printf_unfiltered ("Pseudo "); + if (mantissa_or == 0) + printf_unfiltered ("%sInf", sign); + else + printf_unfiltered ("%s NaN", + usregs[3] & 0x4000 ? "Quiet" : "Signaling"); + if (!normal) + printf_unfiltered (" (NaN)"); + } + else if (!normal) + printf_unfiltered ("Unnormal (NaN)"); + else + { +#if 0 + /* Use this we stop trapping on overflow. */ + floatformat_to_double(&floatformat_i387_ext, + (char *) ep->regs[st_regno], &val); +#else + i387_to_double((char *) ep->regs[st_regno], (char *) &val); +#endif + printf_unfiltered ("%g", val); + } + printf_unfiltered ("\n"); + } +} + +void +i386_float_info () +{ + struct user u; /* just for address computations */ + int i; + /* fpstate defined in */ + struct fpstate *fpstatep; + char buf[sizeof (struct fpstate) + 2 * sizeof (int)]; + unsigned int uaddr; + char fpvalid; + unsigned int rounded_addr; + unsigned int rounded_size; + /*extern int corechan;*/ + int skip; + extern int inferior_pid; + + uaddr = (char *)&U_FPSTATE(u) - (char *)&u; + if (inferior_pid != 0 && core_bfd == NULL) + { + int pid = inferior_pid & ((1 << 17) - 1); /* XXX extract pid from tid */ + ptrace(PT_GETFPREGS, pid, &buf[0], sizeof(struct fpreg)); + fpstatep = (struct fpstate *)&buf[0]; + } + else + fpstatep = &pcb_savefpu; + + print_387_status (fpstatep->sv_ex_sw, (struct env387 *)fpstatep); +} +#endif /* FLOAT_INFO */ + +int +kernel_u_size () +{ + return (sizeof (struct user)); +} + +#ifdef SETUP_ARBITRARY_FRAME +#include "frame.h" +struct frame_info * +setup_arbitrary_frame (argc, argv) + int argc; + CORE_ADDR *argv; +{ + if (argc != 2) + error ("i386 frame specifications require two arguments: sp and pc"); + + return create_new_frame (argv[0], argv[1]); +} +#endif /* SETUP_ARBITRARY_FRAME */ + +#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/i386/tm-i386.h. */ + supply_register (regno++, (char *)&gp->r_eax); + supply_register (regno++, (char *)&gp->r_ecx); + supply_register (regno++, (char *)&gp->r_edx); + supply_register (regno++, (char *)&gp->r_ebx); + supply_register (regno++, (char *)&gp->r_esp); + supply_register (regno++, (char *)&gp->r_ebp); + supply_register (regno++, (char *)&gp->r_esi); + supply_register (regno++, (char *)&gp->r_edi); + supply_register (regno++, (char *)&gp->r_eip); + supply_register (regno++, (char *)&gp->r_eflags); + supply_register (regno++, (char *)&gp->r_cs); + supply_register (regno++, (char *)&gp->r_ss); + supply_register (regno++, (char *)&gp->r_ds); + supply_register (regno++, (char *)&gp->r_es); + supply_register (regno++, (char *)&gp->r_fs); + supply_register (regno++, (char *)&gp->r_gs); +} +#endif /* HAVE_GREGSET_T */ + +#ifdef HAVE_FPREGSET_T +void +supply_fpregset (fp) + fpregset_t *fp; +{ + memcpy (&pcb_savefpu, fp, sizeof pcb_savefpu); +} +#endif /* HAVE_FPREGSET_T */ + +/* Register that we are able to handle aout (trad-core) file formats. */ + +static struct core_fns aout_core_fns = +{ + bfd_target_unknown_flavour, + fetch_core_registers, + NULL +}; + +void +_initialize_core_aout () +{ + add_core_fns (&aout_core_fns); +} + +#ifdef PT_GETDBREGS + +/* + * 0: no trace output + * 1: trace watchpoint requests + * 2: trace `watchpoint hit?' tests, too + */ +#define WATCHPOINT_DEBUG 0 + +#include "breakpoint.h" + +int +can_watch(type, cnt, ot) + int type, cnt, ot; +{ + int rv; + static int cnt_watch, cnt_awatch; + + switch (type) + { + case bp_hardware_watchpoint: + cnt_watch = cnt; + break; + + case bp_access_watchpoint: + cnt_awatch = cnt; + break; + + default: + rv = 0; + goto overandout; + } + + rv = cnt_watch + cnt_awatch <= 4? 1: -1; + + overandout: +#if WATCHPOINT_DEBUG + printf_filtered("can_watch(%d, %d, %d) = %d (counts: w: %d, rw: %d)\n", + type, cnt, ot, rv, cnt_watch, cnt_awatch); +#endif + + return rv; +} + +int +stopped_by_watchpoint() +{ + struct dbreg dbr; + extern int inferior_pid; + + if (current_target.to_shortname == 0 || + ! (strcmp(current_target.to_shortname, "child") == 0 || + strcmp(current_target.to_shortname, "freebsd-uthreads") == 0)) + return 0; + + if (inferior_pid != 0 && core_bfd == NULL) + { + int pid = inferior_pid & ((1 << 17) - 1); /* XXX extract pid from tid */ + + if (ptrace(PT_GETDBREGS, pid, (caddr_t)&dbr, 0) == -1) + { + perror("ptrace(PT_GETDBREGS) failed"); + return 0; + } +#if WATCHPOINT_DEBUG > 1 + printf_filtered("stopped_by_watchpoint(): DR6 = %#x\n", dbr.dr6); +#endif + /* + * If a hardware watchpoint was hit, one of the lower 4 bits in + * DR6 is set (the actual bit indicates which of DR0...DR3 triggered + * the trap). + */ + return dbr.dr6 & 0x0f; + } + else + { + warning("Can't set a watchpoint on a core file."); + return 0; + } +} + +int +insert_watchpoint(addr, len, type) + int addr, len, type; +{ + struct dbreg dbr; + extern int inferior_pid; + + if (current_target.to_shortname == 0 || + ! (strcmp(current_target.to_shortname, "child") == 0 || + strcmp(current_target.to_shortname, "freebsd-uthreads") == 0)) + return 0; + + if (inferior_pid != 0 && core_bfd == NULL) + { + int pid = inferior_pid & ((1 << 17) - 1); /* XXX extract pid from tid */ + int i, mask; + unsigned int sbits; + + if (ptrace(PT_GETDBREGS, pid, (caddr_t)&dbr, 0) == -1) + { + perror("ptrace(PT_GETDBREGS) failed"); + return 0; + } + + for (i = 0, mask = 0x03; i < 4; i++, mask <<= 2) + if ((dbr.dr7 & mask) == 0) + break; + if (i >= 4) { + warning("no more hardware watchpoints available"); + return -1; + } + + /* paranoia */ + if (len > 4) + { + warning("watchpoint length %d unsupported, using lenght = 4", + len); + len = 4; + } + else if (len == 3) + { + warning("weird watchpoint length 3, using 2"); + len = 2; + } + else if (len == 0) + { + warning("weird watchpoint length 0, using 1"); + len = 1; + } + + switch (len) + { + case 1: sbits = 0; break; + case 2: sbits = 4; break; + case 4: sbits = 0x0c; break; + } + + /* + * The `type' value is 0 for `watch on write', 1 for `watch on + * read', 2 for `watch on both'. The i386 debug register + * breakpoint types are 0 for `execute' (not used in GDB), 1 for + * `write', and 4 for `read/write'. Plain `read' trapping is + * not supported on i386, value 3 is illegal. + */ + switch (type) + { + default: + warning("weird watchpoint type %d, using a write watchpoint"); + /* FALLTHROUGH */ + case 0: + sbits |= 1; + break; + + case 2: + sbits |= 3; + break; + } + sbits <<= 4 * i + 16; + sbits |= 1 << 2 * i; + + dbr.dr7 |= sbits; + *(&dbr.dr0 + i) = (unsigned int)addr; + +#if WATCHPOINT_DEBUG + printf_filtered("insert_watchpoint(), inserting DR7 = %#x, DR%d = %#x\n", + dbr.dr7, i, addr); +#endif + if (ptrace(PT_SETDBREGS, pid, (caddr_t)&dbr, 0) == -1) + { + perror("ptrace(PT_SETDBREGS) failed"); + return 0; + } + } + else + { + warning("Can't set a watchpoint on a core file."); + return 0; + } +} + +int +remove_watchpoint(addr, len, type) + int addr, len, type; +{ + struct dbreg dbr; + extern int inferior_pid; + + if (current_target.to_shortname == 0 || + ! (strcmp(current_target.to_shortname, "child") == 0 || + strcmp(current_target.to_shortname, "freebsd-uthreads") == 0)) + return 0; + + if (inferior_pid != 0 && core_bfd == NULL) + { + int pid = inferior_pid & ((1 << 17) - 1); /* XXX extract pid from tid */ + int i; + unsigned int sbits, *dbregp; + + if (ptrace(PT_GETDBREGS, pid, (caddr_t)&dbr, 0) == -1) + { + perror("ptrace(PT_GETDBREGS) failed"); + return 0; + } + + for (i = 0, dbregp = &dbr.dr0; i < 4; i++, dbregp++) + if (*dbregp == (unsigned int)addr) + break; + if (i >= 4) + { + warning("watchpoint for address %#x not found", addr); + return -1; + } + + *dbregp = 0; + sbits = 0xf << (4 * i + 16); + sbits |= 3 << 2 * i; + dbr.dr7 &= ~sbits; + +#if WATCHPOINT_DEBUG + printf_filtered("remove_watchpoint(): removing watchpoint for %#x, DR7 = %#x\n", + addr, dbr.dr7); +#endif + if (ptrace(PT_SETDBREGS, pid, (caddr_t)&dbr, 0) == -1) + { + perror("ptrace(PT_SETDBREGS) failed"); + return 0; + } + } + else + { + warning("Can't set a watchpoint on a core file."); + return 0; + } +} + +#endif /* PT_GETDBREGS */ diff --git a/gnu/usr.bin/binutils214/gdb/i386/kvm-fbsd.c b/gnu/usr.bin/binutils214/gdb/i386/kvm-fbsd.c new file mode 100644 index 0000000000..3167040267 --- /dev/null +++ b/gnu/usr.bin/binutils214/gdb/i386/kvm-fbsd.c @@ -0,0 +1,1056 @@ +/* Live and postmortem kernel debugging functions for FreeBSD. + Copyright 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. */ + +/* + * $FreeBSD: src/gnu/usr.bin/binutils/gdb/i386/kvm-fbsd.c,v 1.17.4.3 2001/12/17 23:06:06 peter Exp $ + * $DragonFly: src/gnu/usr.bin/binutils214/gdb/i386/Attic/kvm-fbsd.c,v 1.1 2004/02/01 08:53:04 dillon Exp $ + */ + +#define _KERNEL_STRUCTURES + +#include "defs.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "frame.h" /* required by inferior.h */ +#include "inferior.h" +#include "symtab.h" +#include "symfile.h" +#include "objfiles.h" +#include "command.h" +#include "bfd.h" +#include "target.h" +#include "gdbcore.h" +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +static void kcore_files_info PARAMS ((struct target_ops *)); + +static void kcore_close PARAMS ((int)); + +static void get_kcore_registers PARAMS ((int)); + +static int kcore_xfer_kmem PARAMS ((CORE_ADDR, char *, int, int, struct target_ops *)); + +static int xfer_umem PARAMS ((CORE_ADDR, char *, int, int)); + +static CORE_ADDR ksym_lookup PARAMS ((const char *)); + +static int read_pcb PARAMS ((int, CORE_ADDR)); + +static struct proc * curProc PARAMS ((void)); + +static int set_proc_context PARAMS ((CORE_ADDR paddr)); + +static void kcore_open PARAMS ((char *filename, int from_tty)); + +static void kcore_detach PARAMS ((char *args, int from_tty)); + +static void set_proc_cmd PARAMS ((char *arg, int from_tty)); + +static void set_cpu_cmd PARAMS ((char *arg, int from_tty)); + +static CORE_ADDR kvtophys PARAMS ((int, CORE_ADDR)); + +static int physrd PARAMS ((int, u_int, char*, int)); + +static int kvm_open PARAMS ((const char *efile, char *cfile, char *sfile, + int perm, char *errout)); + +static int kvm_close PARAMS ((int fd)); + +static int kvm_write PARAMS ((int core_kd, CORE_ADDR memaddr, + char *myaddr, int len)); + +static int kvm_read PARAMS ((int core_kd, CORE_ADDR memaddr, + char *myaddr, int len)); + +static int kvm_uread PARAMS ((int core_kd, struct proc *p, + CORE_ADDR memaddr, char *myaddr, + int len)); + +static int kernel_core_file_hook PARAMS ((int fd, CORE_ADDR addr, + char *buf, int len)); + +static struct kinfo_proc * kvm_getprocs PARAMS ((int cfd, int op, + CORE_ADDR proc, int *cnt)); + +extern struct target_ops kcore_ops; /* Forward decl */ + +/* Non-zero means we are debugging a kernel core file */ +int kernel_debugging = 0; +int kernel_writablecore = 0; + +static char *core_file; +static int core_kd = -1; +static struct proc *cur_proc; +static CORE_ADDR kernel_start; + +static int ncpus; +static int cpuid; +static CORE_ADDR prv_space; /* per-cpu private space */ +static int prv_space_size; +#define prv_start (prv_space + cpuid * prv_space_size) + +/* + * Read the "thing" at kernel address 'addr' into the space pointed to + * by point. The length of the "thing" is determined by the type of p. + * Result is non-zero if transfer fails. + */ +#define kvread(addr, p) \ + (target_read_memory ((CORE_ADDR)(addr), (char *)(p), sizeof(*(p)))) + + + +/* + * The following is FreeBSD-specific hackery to decode special frames + * and elide the assembly-language stub. This could be made faster by + * defining a frame_type field in the machine-dependent frame information, + * but we don't think that's too important right now. + */ +enum frametype { tf_normal, tf_trap, tf_interrupt, tf_syscall }; + +CORE_ADDR +fbsd_kern_frame_saved_pc (fr) +struct frame_info *fr; +{ + struct minimal_symbol *sym; + CORE_ADDR this_saved_pc; + enum frametype frametype; + + this_saved_pc = read_memory_integer (fr->frame + 4, 4); + sym = lookup_minimal_symbol_by_pc (this_saved_pc); + frametype = tf_normal; + if (sym != NULL) { + if (strcmp (SYMBOL_NAME(sym), "calltrap") == 0) + frametype = tf_trap; + else if (strncmp (SYMBOL_NAME(sym), "Xresume", 7) == 0) + frametype = tf_interrupt; + else if (strcmp (SYMBOL_NAME(sym), "Xsyscall") == 0) + frametype = tf_syscall; + } + + switch (frametype) { + case tf_normal: + return (this_saved_pc); + +#define oEIP offsetof(struct trapframe, tf_eip) + + case tf_trap: + return (read_memory_integer (fr->frame + 8 + oEIP, 4)); + + case tf_interrupt: + return (read_memory_integer (fr->frame + 16 + oEIP, 4)); + + case tf_syscall: + return (read_memory_integer (fr->frame + 8 + oEIP, 4)); +#undef oEIP + } +} + +static CORE_ADDR +ksym_lookup (name) +const char *name; +{ + struct minimal_symbol *sym; + + sym = lookup_minimal_symbol (name, NULL, NULL); + if (sym == NULL) + error ("kernel symbol `%s' not found.", name); + + return SYMBOL_VALUE_ADDRESS (sym); +} + +static struct proc * +curProc () +{ + CORE_ADDR td_ptr_addr; + CORE_ADDR td_ptr; + CORE_ADDR p_ptr_addr; + CORE_ADDR p_ptr; + + td_ptr_addr = prv_start + offsetof(struct mdglobaldata, mi.gd_curthread); + if (kvread(td_ptr_addr, &td_ptr) != 0) + error ("cannot read thread pointer at %08x\n", td_ptr_addr); + p_ptr_addr = td_ptr + offsetof(struct thread, td_proc); + if (kvread(p_ptr_addr, &p_ptr) != 0) + error ("cannot read proc pointer at %08x\n", p_ptr_addr); + return((void *)p_ptr); +} + +/* + * Set the process context to that of the proc structure at + * system address paddr. + */ +static int +set_proc_context (paddr) + CORE_ADDR paddr; +{ + struct proc p; + + if (paddr < kernel_start) + return (1); + + cur_proc = (struct proc *)paddr; + printf("CURPROC %08x\n", cur_proc); +#ifdef notyet + set_kernel_boundaries (cur_proc); +#endif + + /* Fetch all registers from core file */ + target_fetch_registers (-1); + + /* Now, set up the frame cache, and print the top of stack */ + flush_cached_frames (); + set_current_frame (create_new_frame (read_fp (), read_pc ())); + select_frame (get_current_frame (), 0); + return (0); +} + +/* Discard all vestiges of any previous core file + and mark data and stack spaces as empty. */ + +/* ARGSUSED */ +static void +kcore_close (quitting) + int quitting; +{ + inferior_pid = 0; /* Avoid confusion from thread stuff */ + + if (core_kd) + { + kvm_close (core_kd); + free (core_file); + core_file = NULL; + core_kd = -1; + } +} + +/* This routine opens and sets up the core file bfd */ + +static void +kcore_open (filename, from_tty) + char *filename; + int from_tty; +{ + const char *p; + struct cleanup *old_chain; + char buf[256], *cp; + int ontop; + CORE_ADDR addr; + struct pcb pcb; + + target_preopen (from_tty); + + unpush_target (&kcore_ops); + + if (!filename) + { + /*error (core_kd?*/ + error ( (core_kd >= 0)? + "No core file specified. (Use `detach' to stop debugging a core file.)" + : "No core file specified."); + } + + filename = tilde_expand (filename); + if (filename[0] != '/') + { + cp = concat (current_directory, "/", filename, NULL); + free (filename); + filename = cp; + } + + old_chain = make_cleanup (free, filename); + + /* + * gdb doesn't really do anything if the exec-file couldn't + * be opened (in that case exec_bfd is NULL). Usually that's + * no big deal, but kvm_open needs the exec-file's name, + * which results in dereferencing a NULL pointer, a real NO-NO ! + * So, check here if the open of the exec-file succeeded. + */ + if (exec_bfd == NULL) /* the open failed */ + error ("kgdb could not open the exec-file, please check the name you used !"); + + core_kd = kvm_open (exec_bfd->filename, filename, NULL, + kernel_writablecore? O_RDWR : O_RDONLY, "kgdb: "); + if (core_kd < 0) + perror_with_name (filename); + + /* Looks semi-reasonable. Toss the old core file and work on the new. */ + + discard_cleanups (old_chain); /* Don't free filename any more */ + core_file = filename; + ontop = !push_target (&kcore_ops); + + kernel_start = bfd_get_start_address (exec_bfd); /* XXX */ + + /* print out the panic string if there is one */ + if (kvread (ksym_lookup ("panicstr"), &addr) == 0 + && addr != 0 + && target_read_memory (addr, buf, sizeof (buf)) == 0) + { + for (cp = buf; cp < &buf[sizeof (buf)] && *cp; cp++) + if (!isascii (*cp) || (!isprint (*cp) && !isspace (*cp))) + *cp = '?'; + *cp = '\0'; + if (buf[0] != '\0') + printf ("panicstr: %s\n", buf); + } + + /* Print all the panic messages if possible. */ + if (symfile_objfile != NULL) + { + printf ("panic messages:\n---\n"); + snprintf (buf, sizeof buf, + "/sbin/dmesg -N %s -M %s | \ + /usr/bin/awk '/^(panic:|Fatal trap) / { printing = 1 } \ + { if (printing) print $0 }'", + symfile_objfile->name, filename); + fflush(stdout); + system (buf); + printf ("---\n"); + } + + if (!ontop) + { + warning ("you won't be able to access this core file until you terminate\n\ +your %s; do ``info files''", target_longname); + return; + } + + /* we may need this later */ + cur_proc = (struct proc *)curProc (); + /* Now, set up the frame cache, and print the top of stack */ + flush_cached_frames (); + set_current_frame (create_new_frame (read_fp (), read_pc ())); + select_frame (get_current_frame (), 0); + print_stack_frame (selected_frame, selected_frame_level, 1); +} + +static void +kcore_detach (args, from_tty) + char *args; + int from_tty; +{ + if (args) + error ("Too many arguments"); + unpush_target (&kcore_ops); + reinit_frame_cache (); + if (from_tty) + printf_filtered ("No kernel core file now.\n"); +} + +/* Get the registers out of a core file. This is the machine- + independent part. Fetch_core_registers is the machine-dependent + part, typically implemented in the xm-file for each architecture. */ + +/* We just get all the registers, so we don't use regno. */ +/* ARGSUSED */ + +#if 0 +#define PCB_ADDR(uptr) ((char *)uptr + UPAGES * PAGE_SIZE - sizeof(struct pcb)) +#endif + +static void +get_kcore_registers (int regno) +{ + struct user *uaddr; + struct thread *td; + void *pcb; + + /* find the pcb for the current process */ + if (cur_proc == NULL) + error ("cur_proc is NULL"); + if (kvread(&cur_proc->p_thread, &td)) + error ("cannot read cur_proc->p_thread at %p", cur_proc); + if (kvread(&td->td_pcb, &pcb)) + error ("cannot read cur_proc->p_thread->td_pcb at %p", td); + /* + * Hack, gdb using newer structures need to deal with older elements + * XXX look up the offset in the debug info ? + */ + if (pcb == (void *)0xff800000) { + if (kvread(&td->td_pcb - 1, &pcb)) + error ("cannot read cur_proc->p_thread->td_pcb at %p", td); + } + if (read_pcb(core_kd, (CORE_ADDR)pcb) < 0) + error ("cannot read pcb at %p", pcb); +} + +static void +kcore_files_info (t) + struct target_ops *t; +{ + printf ("\t`%s'\n", core_file); +} + +static CORE_ADDR +ksym_maxuseraddr() +{ + static CORE_ADDR maxuseraddr; + struct minimal_symbol *sym; + + if (maxuseraddr == 0) + { + sym = lookup_minimal_symbol ("PTmap", NULL, NULL); + if (sym == NULL) { + maxuseraddr = VM_MAXUSER_ADDRESS; + } else { + maxuseraddr = SYMBOL_VALUE_ADDRESS (sym); + } + } + return maxuseraddr; +} + +static int +kcore_xfer_kmem (memaddr, myaddr, len, write, target) + CORE_ADDR memaddr; + char *myaddr; + int len; + int write; + struct target_ops *target; +{ + int ns; + int nu; + + if (memaddr >= ksym_maxuseraddr()) + nu = 0; + else + { + nu = xfer_umem (memaddr, myaddr, len, write); + if (nu <= 0) + return (0); + if (nu == len) + return (nu); + memaddr += nu; + if (memaddr != ksym_maxuseraddr()) + return (nu); + myaddr += nu; + len -= nu; + } + + ns = (write ? kvm_write : kvm_read) (core_kd, memaddr, myaddr, len); + if (ns < 0) + ns = 0; + + return (nu + ns); +} + +static int +xfer_umem (memaddr, myaddr, len, write) + CORE_ADDR memaddr; + char *myaddr; + int len; + int write; /* ignored */ +{ + int n; + struct proc proc; + + if (cur_proc == NULL || kvread (cur_proc, &proc)) + error ("cannot read proc at %#x", cur_proc); + n = kvm_uread (core_kd, &proc, memaddr, myaddr, len) ; + + if (n < 0) + return 0; + return n; +} + +static CORE_ADDR +ksym_kernbase() +{ + static CORE_ADDR kernbase; + struct minimal_symbol *sym; + + if (kernbase == 0) + { + sym = lookup_minimal_symbol ("kernbase", NULL, NULL); + if (sym == NULL) { + kernbase = KERNBASE; + } else { + kernbase = SYMBOL_VALUE_ADDRESS (sym); + } + } + return kernbase; +} + +#define KERNOFF (ksym_kernbase()) +#define INKERNEL(x) ((x) >= KERNOFF) + +static CORE_ADDR sbr; +static CORE_ADDR curpcb; +static int found_pcb; +static int devmem; +static int kfd; +static struct pcb pcb; + +static void +set_proc_cmd (char *arg, int from_tty) +{ + CORE_ADDR paddr; + struct kinfo_proc *kp; + int cnt = 0; + + if (!arg) + error_no_arg ("proc address for new current process"); + if (!kernel_debugging) + error ("not debugging kernel"); + + paddr = (CORE_ADDR)parse_and_eval_address (arg); + /* assume it's a proc pointer if it's in the kernel */ + if (paddr >= kernel_start) { + if (set_proc_context(paddr)) + error("invalid proc address"); + } else { + kp = kvm_getprocs(core_kd, KERN_PROC_PID, paddr, &cnt); + if (!cnt) + error("invalid pid"); + if (set_proc_context((CORE_ADDR)kp->kp_eproc.e_paddr)) + error("invalid proc address"); + } +} + +static CORE_ADDR +findpcb(int cfd) +{ + CORE_ADDR td_ptr_addr; + CORE_ADDR td_ptr; + CORE_ADDR pcb_ptr_addr; + CORE_ADDR pcb_ptr; + + td_ptr_addr = prv_start + offsetof(struct mdglobaldata, mi.gd_curthread); + td_ptr_addr = kvtophys(cfd, td_ptr_addr); + physrd(cfd, td_ptr_addr, (char *)&td_ptr, sizeof(CORE_ADDR)); + pcb_ptr_addr = td_ptr + offsetof(struct thread, td_pcb); + pcb_ptr_addr = kvtophys(cfd, pcb_ptr_addr); + physrd(cfd, pcb_ptr_addr, (char *)&pcb_ptr, sizeof(CORE_ADDR)); + return(pcb_ptr); +} + +static void +set_cpu_cmd (arg, from_tty) + char *arg; + int from_tty; +{ + CORE_ADDR paddr; + struct kinfo_proc *kp; + int cpu, cfd; + + if (!arg) + error_no_arg ("cpu number"); + if (!kernel_debugging) + error ("not debugging kernel"); + if (!ncpus) + error ("not debugging SMP kernel"); + + cpu = (int)parse_and_eval_address (arg); + if (cpu < 0 || cpu > ncpus) + error ("cpu number out of range"); + cpuid = cpu; + + cfd = core_kd; + curpcb = findpcb(cfd); + + if (!devmem) + paddr = ksym_lookup ("dumppcb") - KERNOFF; + else + paddr = kvtophys (cfd, curpcb); + read_pcb (cfd, paddr); + printf ("initial pcb at %lx\n", (unsigned long)paddr); + + if ((cur_proc = curProc())) + target_fetch_registers (-1); + + /* Now, set up the frame cache, and print the top of stack */ + flush_cached_frames (); + set_current_frame (create_new_frame (read_fp (), read_pc ())); + select_frame (get_current_frame (), 0); + print_stack_frame (selected_frame, selected_frame_level, 1); +} + +/* substitutes for the stuff in libkvm which doesn't work */ +/* most of this was taken from the old kgdb */ + +/* we don't need all this stuff, but the call should look the same */ + +static int +kvm_open (efile, cfile, sfile, perm, errout) + const char *efile; + char *cfile; + char *sfile; /* makes this kvm_open more compatible to the one in libkvm */ + int perm; + char *errout; /* makes this kvm_open more compatible to the one in libkvm */ +{ + struct stat stb; + int cfd; + CORE_ADDR paddr; + + if ((cfd = open (cfile, perm, 0)) < 0) + return (cfd); + + fstat (cfd, &stb); + if ((stb.st_mode & S_IFMT) == S_IFCHR + && stb.st_rdev == makedev (2, 0)) + { + devmem = 1; + kfd = open (_PATH_KMEM, perm, 0); + } + + /* + * Both UP and SMP use CPU_prvspace. + */ + + physrd(cfd, ksym_lookup("ncpus") - KERNOFF, (char *)&ncpus, sizeof(ncpus)); + prv_space = ksym_lookup("CPU_prvspace"); + prv_space_size = (int)ksym_lookup("gd_idlestack_top"); + printf("%d cpu%s [%08x,%d]\n", ncpus, (ncpus == 1 ? "" : "s"), prv_space, prv_space_size); + cpuid = 0; + + physrd (cfd, ksym_lookup ("IdlePTD") - KERNOFF, (char*)&sbr, sizeof sbr); + printf ("IdlePTD at phsyical address 0x%08lx\n", (unsigned long)sbr); + curpcb = findpcb(cfd); + + found_pcb = 1; /* for vtophys */ + if (!devmem) + paddr = ksym_lookup ("dumppcb") - KERNOFF; + else + paddr = kvtophys (cfd, curpcb); + read_pcb (cfd, paddr); + printf ("initial pcb at physical address 0x%08lx\n", (unsigned long)paddr); + + return (cfd); +} + +static int +kvm_close (fd) + int fd; +{ + return (close (fd)); +} + +static int +kvm_write (core_kd, memaddr, myaddr, len) + int core_kd; + CORE_ADDR memaddr; + char *myaddr; +{ + int cc; + + if (devmem) + { + if (kfd > 0) + { + /* + * Just like kvm_read, only we write. + */ + errno = 0; + if (lseek (kfd, (off_t)memaddr, 0) < 0 + && errno != 0) + { + error ("kvm_write:invalid address (%x)", memaddr); + return (0); + } + cc = write (kfd, myaddr, len); + if (cc < 0) + { + error ("kvm_write:write failed"); + return (0); + } + else if (cc < len) + error ("kvm_write:short write"); + return (cc); + } + else + return (0); + } + else + { + printf ("kvm_write not implemented for dead kernels\n"); + return (0); + } + /* NOTREACHED */ +} + +static int +kvm_read (core_kd, memaddr, myaddr, len) + int core_kd; + CORE_ADDR memaddr; + char *myaddr; +{ + return (kernel_core_file_hook (core_kd, memaddr, myaddr, len)); +} + +static int +kvm_uread (core_kd, p, memaddr, myaddr, len) + int core_kd; + register struct proc *p; + CORE_ADDR memaddr; + char *myaddr; + int len; +{ + register char *cp; + char procfile[MAXPATHLEN]; + ssize_t amount; + int fd; + + if (devmem) + { + sprintf (procfile, "/proc/%d/mem", p->p_pid); + fd = open (procfile, O_RDONLY, 0); + if (fd < 0) + { + error ("cannot open %s", procfile); + close (fd); + return (0); + } + + cp = myaddr; + while (len > 0) + { + errno = 0; + if (lseek (fd, (off_t)memaddr, 0) == -1 && errno != 0) + { + error ("invalid address (%x) in %s", memaddr, procfile); + break; + } + amount = read (fd, cp, len); + if (amount < 0) + { + error ("error reading %s", procfile); + break; + } + if (amount == 0) + { + error ("EOF reading %s", procfile); + break; + } + cp += amount; + memaddr += amount; + len -= amount; + } + + close (fd); + return ((ssize_t) (cp - myaddr)); + } + else + return (kernel_core_file_hook (core_kd, memaddr, myaddr, len)); +} + +static struct kinfo_proc kp; + +/* + * try to do what kvm_proclist in libkvm would do + */ +static int +kvm_proclist (cfd, pid, p, cnt) +int cfd, pid, *cnt; +struct proc *p; +{ + struct proc lp; + + for (; p != NULL; p = lp.p_list.le_next) { + if (!kvm_read(cfd, (CORE_ADDR)p, (char *)&lp, sizeof (lp))) + return (0); + if (lp.p_pid != pid) + continue; + kp.kp_eproc.e_paddr = p; + *cnt = 1; + return (1); + } + *cnt = 0; + return (0); +} + +/* + * try to do what kvm_deadprocs in libkvm would do + */ +static struct kinfo_proc * +kvm_deadprocs (cfd, pid, cnt) +int cfd, pid, *cnt; +{ + CORE_ADDR allproc, zombproc; + struct proc *p; + + allproc = ksym_lookup("allproc"); + if (kvm_read(cfd, allproc, (char *)&p, sizeof (p)) == 0) + return (NULL); + kvm_proclist (cfd, pid, p, cnt); + if (!*cnt) { + zombproc = ksym_lookup("zombproc"); + if (kvm_read(cfd, zombproc, (char *)&p, sizeof (p)) == 0) + return (NULL); + kvm_proclist (cfd, pid, p, cnt); + } + return (&kp); +} + +/* + * try to do what kvm_getprocs in libkvm would do + */ +static struct kinfo_proc * +kvm_getprocs (cfd, op, proc, cnt) +int cfd, op, *cnt; +CORE_ADDR proc; +{ + int mib[4], size; + + *cnt = 0; + /* assume it's a pid */ + if (devmem) { /* "live" kernel, use sysctl */ + mib[0] = CTL_KERN; + mib[1] = KERN_PROC; + mib[2] = KERN_PROC_PID; + mib[3] = (int)proc; + size = sizeof (kp); + if (sysctl (mib, 4, &kp, &size, NULL, 0) < 0) { + perror("sysctl"); + *cnt = 0; + return (NULL); + } + if (!size) + *cnt = 0; + else + *cnt = 1; + return (&kp); + } else + return (kvm_deadprocs (cfd, (int)proc, cnt)); +} + +static int +physrd (cfd, addr, dat, len) + int cfd; + u_int addr; + char *dat; + int len; +{ + if (lseek (cfd, (off_t)addr, L_SET) == -1) + return (-1); + return (read (cfd, dat, len)); +} + +static CORE_ADDR +kvtophys (fd, addr) + int fd; + CORE_ADDR addr; +{ + CORE_ADDR v; + unsigned int pte; + static CORE_ADDR PTD = -1; + CORE_ADDR current_ptd; + + /* + * We may no longer have a linear system page table... + * + * Here's the scoop. IdlePTD contains the physical address + * of a page table directory that always maps the kernel. + * IdlePTD is in memory that is mapped 1-to-1, so we can + * find it easily given its 'virtual' address from ksym_lookup(). + * For hysterical reasons, the value of IdlePTD is stored in sbr. + * + * To look up a kernel address, we first convert it to a 1st-level + * address and look it up in IdlePTD. This gives us the physical + * address of a page table page; we extract the 2nd-level part of + * VA and read the 2nd-level pte. Finally, we add the offset part + * of the VA into the physical address from the pte and return it. + * + * User addresses are a little more complicated. If we don't have + * a current PCB from read_pcb(), we use PTD, which is the (fixed) + * virtual address of the current ptd. Since it's NOT in 1-to-1 + * kernel space, we must look it up using IdlePTD. If we do have + * a pcb, we get the ptd from pcb_ptd. + */ + + if (INKERNEL (addr)) + current_ptd = sbr; + else if (found_pcb == 0) + { + if (PTD == -1) + PTD = kvtophys (fd, ksym_lookup ("PTD")); + current_ptd = PTD; + } + else + current_ptd = pcb.pcb_cr3; + + /* + * Read the first-level page table (ptd). + */ + v = current_ptd + ( (unsigned)addr >> PDRSHIFT) * sizeof pte; + if (physrd (fd, v, (char *)&pte, sizeof pte) < 0 || (pte&PG_V) == 0) + return (~0); + + if (pte & PG_PS) + { + /* + * No second-level page table; ptd describes one 4MB page. + * (We assume that the kernel wouldn't set PG_PS without enabling + * it cr0, and that the kernel doesn't support 36-bit physical + * addresses). + */ +#define PAGE4M_MASK (NBPDR - 1) +#define PG_FRAME4M (~PAGE4M_MASK) + addr = (pte & PG_FRAME4M) + (addr & PAGE4M_MASK); + } + else + { + /* + * Read the second-level page table. + */ + v = (pte&PG_FRAME) + ((addr >> PAGE_SHIFT)&(NPTEPG-1)) * sizeof pte; + if (physrd (fd, v, (char *) &pte, sizeof (pte)) < 0 || (pte&PG_V) == 0) + return (~0); + + addr = (pte & PG_FRAME) + (addr & PAGE_MASK); + } +#if 0 + printf ("vtophys (%x) -> %x\n", oldaddr, addr); +#endif + return (addr); +} + +static int +read_pcb (int fd, CORE_ADDR pcbaddr) +{ + int i; + int noreg; + CORE_ADDR npcbaddr; + + /* need this for the `proc' command to work */ + /* this is a bad hack XXX */ + if (INKERNEL(pcbaddr)) + npcbaddr = kvtophys(fd, pcbaddr); + else + npcbaddr = pcbaddr; + + if (physrd (fd, (CORE_ADDR)npcbaddr, (char *)&pcb, sizeof pcb) < 0) { + error ("cannot read pcb at %x\n", pcbaddr); + return (-1); + } + printf("PCB @%08x EIP=%08x ESP=%08x EBP=%08x\n", npcbaddr, pcb.pcb_eip, pcb.pcb_esp, pcb.pcb_ebp); + + /* + * get the register values out of the sys pcb and + * store them where `read_register' will find them. + */ + /* + * XXX many registers aren't available. + * XXX for the non-core case, the registers are stale - they are for + * the last context switch to the debugger. + * XXX gcc's register numbers aren't all #defined in tm-i386.h. + */ + noreg = 0; + for (i = 0; i < 3; ++i) /* eax,ecx,edx */ + supply_register (i, (char *)&noreg); + supply_register (3, (char *)&pcb.pcb_ebx); + supply_register (SP_REGNUM, (char *)&pcb.pcb_esp); + supply_register (FP_REGNUM, (char *)&pcb.pcb_ebp); + supply_register (6, (char *)&pcb.pcb_esi); + supply_register (7, (char *)&pcb.pcb_edi); + supply_register (PC_REGNUM, (char *)&pcb.pcb_eip); + for (i = 9; i < 14; ++i) /* eflags, cs, ss, ds, es, fs */ + supply_register (i, (char *)&noreg); + supply_register (15, (char *)&pcb.pcb_gs); + + /* XXX 80387 registers? */ +} + +/* + * read len bytes from kernel virtual address 'addr' into local + * buffer 'buf'. Return numbert of bytes if read ok, 0 otherwise. On read + * errors, portion of buffer not read is zeroed. + */ + +static int +kernel_core_file_hook (fd, addr, buf, len) + int fd; + CORE_ADDR addr; + char *buf; + int len; +{ + int i; + CORE_ADDR paddr; + register char *cp; + int cc; + + cp = buf; + + while (len > 0) + { + paddr = kvtophys (fd, addr); + if (paddr == ~0) + { + memset (buf, '\000', len); + break; + } + /* we can't read across a page boundary */ + i = min (len, PAGE_SIZE - (addr & PAGE_MASK)); + if ( (cc = physrd (fd, paddr, cp, i)) <= 0) + { + memset (cp, '\000', len); + return (cp - buf); + } + cp += cc; + addr += cc; + len -= cc; + } + return (cp - buf); +} + +static struct target_ops kcore_ops; + +void +_initialize_kcorelow() +{ + kcore_ops.to_shortname = "kcore"; + kcore_ops.to_longname = "Kernel core dump file"; + kcore_ops.to_doc = + "Use a core file as a target. Specify the filename of the core file."; + kcore_ops.to_open = kcore_open; + kcore_ops.to_close = kcore_close; + kcore_ops.to_attach = find_default_attach; + kcore_ops.to_detach = kcore_detach; + kcore_ops.to_fetch_registers = get_kcore_registers; + kcore_ops.to_xfer_memory = kcore_xfer_kmem; + kcore_ops.to_files_info = kcore_files_info; + kcore_ops.to_create_inferior = find_default_create_inferior; + kcore_ops.to_stratum = kcore_stratum; + kcore_ops.to_has_memory = 1; + kcore_ops.to_has_stack = 1; + kcore_ops.to_has_registers = 1; + kcore_ops.to_magic = OPS_MAGIC; + + add_target (&kcore_ops); + add_com ("proc", class_obscure, set_proc_cmd, "Set current process context"); + add_com ("cpu", class_obscure, set_cpu_cmd, "Set current cpu"); +} diff --git a/gnu/usr.bin/binutils214/gdb/i386/kvm-fbsd.c.orig b/gnu/usr.bin/binutils214/gdb/i386/kvm-fbsd.c.orig new file mode 100644 index 0000000000..cd399f87c0 --- /dev/null +++ b/gnu/usr.bin/binutils214/gdb/i386/kvm-fbsd.c.orig @@ -0,0 +1,1045 @@ +/* Live and postmortem kernel debugging functions for FreeBSD. + Copyright 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. */ + +/* + * $FreeBSD: src/gnu/usr.bin/binutils/gdb/i386/kvm-fbsd.c,v 1.17.4.3 2001/12/17 23:06:06 peter Exp $ + * $DragonFly: src/gnu/usr.bin/binutils214/gdb/i386/Attic/kvm-fbsd.c.orig,v 1.1 2004/02/01 08:53:04 dillon Exp $ + */ + +#define _KERNEL_STRUCTURES + +#include "defs.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "frame.h" /* required by inferior.h */ +#include "inferior.h" +#include "symtab.h" +#include "symfile.h" +#include "objfiles.h" +#include "command.h" +#include "bfd.h" +#include "target.h" +#include "gdbcore.h" +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +static void kcore_files_info PARAMS ((struct target_ops *)); + +static void kcore_close PARAMS ((int)); + +static void get_kcore_registers PARAMS ((int)); + +static int kcore_xfer_kmem PARAMS ((CORE_ADDR, char *, int, int, struct target_ops *)); + +static int xfer_umem PARAMS ((CORE_ADDR, char *, int, int)); + +static CORE_ADDR ksym_lookup PARAMS ((const char *)); + +static int read_pcb PARAMS ((int, CORE_ADDR)); + +static struct proc * curProc PARAMS ((void)); + +static int set_proc_context PARAMS ((CORE_ADDR paddr)); + +static void kcore_open PARAMS ((char *filename, int from_tty)); + +static void kcore_detach PARAMS ((char *args, int from_tty)); + +static void set_proc_cmd PARAMS ((char *arg, int from_tty)); + +static void set_cpu_cmd PARAMS ((char *arg, int from_tty)); + +static CORE_ADDR kvtophys PARAMS ((int, CORE_ADDR)); + +static int physrd PARAMS ((int, u_int, char*, int)); + +static int kvm_open PARAMS ((const char *efile, char *cfile, char *sfile, + int perm, char *errout)); + +static int kvm_close PARAMS ((int fd)); + +static int kvm_write PARAMS ((int core_kd, CORE_ADDR memaddr, + char *myaddr, int len)); + +static int kvm_read PARAMS ((int core_kd, CORE_ADDR memaddr, + char *myaddr, int len)); + +static int kvm_uread PARAMS ((int core_kd, struct proc *p, + CORE_ADDR memaddr, char *myaddr, + int len)); + +static int kernel_core_file_hook PARAMS ((int fd, CORE_ADDR addr, + char *buf, int len)); + +static struct kinfo_proc * kvm_getprocs PARAMS ((int cfd, int op, + CORE_ADDR proc, int *cnt)); + +extern struct target_ops kcore_ops; /* Forward decl */ + +/* Non-zero means we are debugging a kernel core file */ +int kernel_debugging = 0; +int kernel_writablecore = 0; + +static char *core_file; +static int core_kd = -1; +static struct proc *cur_proc; +static CORE_ADDR kernel_start; + +static int ncpus; +static int cpuid; +static CORE_ADDR prv_space; /* per-cpu private space */ +static int prv_space_size; +#define prv_start (prv_space + cpuid * prv_space_size) + +/* + * Read the "thing" at kernel address 'addr' into the space pointed to + * by point. The length of the "thing" is determined by the type of p. + * Result is non-zero if transfer fails. + */ +#define kvread(addr, p) \ + (target_read_memory ((CORE_ADDR)(addr), (char *)(p), sizeof(*(p)))) + + + +/* + * The following is FreeBSD-specific hackery to decode special frames + * and elide the assembly-language stub. This could be made faster by + * defining a frame_type field in the machine-dependent frame information, + * but we don't think that's too important right now. + */ +enum frametype { tf_normal, tf_trap, tf_interrupt, tf_syscall }; + +CORE_ADDR +fbsd_kern_frame_saved_pc (fr) +struct frame_info *fr; +{ + struct minimal_symbol *sym; + CORE_ADDR this_saved_pc; + enum frametype frametype; + + this_saved_pc = read_memory_integer (fr->frame + 4, 4); + sym = lookup_minimal_symbol_by_pc (this_saved_pc); + frametype = tf_normal; + if (sym != NULL) { + if (strcmp (SYMBOL_NAME(sym), "calltrap") == 0) + frametype = tf_trap; + else if (strncmp (SYMBOL_NAME(sym), "Xresume", 7) == 0) + frametype = tf_interrupt; + else if (strcmp (SYMBOL_NAME(sym), "Xsyscall") == 0) + frametype = tf_syscall; + } + + switch (frametype) { + case tf_normal: + return (this_saved_pc); + +#define oEIP offsetof(struct trapframe, tf_eip) + + case tf_trap: + return (read_memory_integer (fr->frame + 8 + oEIP, 4)); + + case tf_interrupt: + return (read_memory_integer (fr->frame + 16 + oEIP, 4)); + + case tf_syscall: + return (read_memory_integer (fr->frame + 8 + oEIP, 4)); +#undef oEIP + } +} + +static CORE_ADDR +ksym_lookup (name) +const char *name; +{ + struct minimal_symbol *sym; + + sym = lookup_minimal_symbol (name, NULL, NULL); + if (sym == NULL) + error ("kernel symbol `%s' not found.", name); + + return SYMBOL_VALUE_ADDRESS (sym); +} + +static struct proc * +curProc () +{ + CORE_ADDR td_ptr_addr; + CORE_ADDR td_ptr; + CORE_ADDR p_ptr_addr; + CORE_ADDR p_ptr; + + td_ptr_addr = prv_start + offsetof(struct mdglobaldata, mi.gd_curthread); + if (kvread(td_ptr_addr, &td_ptr) != 0) + error ("cannot read thread pointer at %08x\n", td_ptr_addr); + p_ptr_addr = td_ptr + offsetof(struct thread, td_proc); + if (kvread(p_ptr_addr, &p_ptr) != 0) + error ("cannot read proc pointer at %08x\n", p_ptr_addr); + return((void *)p_ptr); +} + +/* + * Set the process context to that of the proc structure at + * system address paddr. + */ +static int +set_proc_context (paddr) + CORE_ADDR paddr; +{ + struct proc p; + + if (paddr < kernel_start) + return (1); + + cur_proc = (struct proc *)paddr; +#ifdef notyet + set_kernel_boundaries (cur_proc); +#endif + + /* Fetch all registers from core file */ + target_fetch_registers (-1); + + /* Now, set up the frame cache, and print the top of stack */ + flush_cached_frames (); + set_current_frame (create_new_frame (read_fp (), read_pc ())); + select_frame (get_current_frame (), 0); + return (0); +} + +/* Discard all vestiges of any previous core file + and mark data and stack spaces as empty. */ + +/* ARGSUSED */ +static void +kcore_close (quitting) + int quitting; +{ + inferior_pid = 0; /* Avoid confusion from thread stuff */ + + if (core_kd) + { + kvm_close (core_kd); + free (core_file); + core_file = NULL; + core_kd = -1; + } +} + +/* This routine opens and sets up the core file bfd */ + +static void +kcore_open (filename, from_tty) + char *filename; + int from_tty; +{ + const char *p; + struct cleanup *old_chain; + char buf[256], *cp; + int ontop; + CORE_ADDR addr; + struct pcb pcb; + + target_preopen (from_tty); + + unpush_target (&kcore_ops); + + if (!filename) + { + /*error (core_kd?*/ + error ( (core_kd >= 0)? + "No core file specified. (Use `detach' to stop debugging a core file.)" + : "No core file specified."); + } + + filename = tilde_expand (filename); + if (filename[0] != '/') + { + cp = concat (current_directory, "/", filename, NULL); + free (filename); + filename = cp; + } + + old_chain = make_cleanup (free, filename); + + /* + * gdb doesn't really do anything if the exec-file couldn't + * be opened (in that case exec_bfd is NULL). Usually that's + * no big deal, but kvm_open needs the exec-file's name, + * which results in dereferencing a NULL pointer, a real NO-NO ! + * So, check here if the open of the exec-file succeeded. + */ + if (exec_bfd == NULL) /* the open failed */ + error ("kgdb could not open the exec-file, please check the name you used !"); + + core_kd = kvm_open (exec_bfd->filename, filename, NULL, + kernel_writablecore? O_RDWR : O_RDONLY, "kgdb: "); + if (core_kd < 0) + perror_with_name (filename); + + /* Looks semi-reasonable. Toss the old core file and work on the new. */ + + discard_cleanups (old_chain); /* Don't free filename any more */ + core_file = filename; + ontop = !push_target (&kcore_ops); + + kernel_start = bfd_get_start_address (exec_bfd); /* XXX */ + + /* print out the panic string if there is one */ + if (kvread (ksym_lookup ("panicstr"), &addr) == 0 + && addr != 0 + && target_read_memory (addr, buf, sizeof (buf)) == 0) + { + for (cp = buf; cp < &buf[sizeof (buf)] && *cp; cp++) + if (!isascii (*cp) || (!isprint (*cp) && !isspace (*cp))) + *cp = '?'; + *cp = '\0'; + if (buf[0] != '\0') + printf ("panicstr: %s\n", buf); + } + + /* Print all the panic messages if possible. */ + if (symfile_objfile != NULL) + { + printf ("panic messages:\n---\n"); + snprintf (buf, sizeof buf, + "/sbin/dmesg -N %s -M %s | \ + /usr/bin/awk '/^(panic:|Fatal trap) / { printing = 1 } \ + { if (printing) print $0 }'", + symfile_objfile->name, filename); + fflush(stdout); + system (buf); + printf ("---\n"); + } + + if (!ontop) + { + warning ("you won't be able to access this core file until you terminate\n\ +your %s; do ``info files''", target_longname); + return; + } + + /* we may need this later */ + cur_proc = (struct proc *)curProc (); + /* Now, set up the frame cache, and print the top of stack */ + flush_cached_frames (); + set_current_frame (create_new_frame (read_fp (), read_pc ())); + select_frame (get_current_frame (), 0); + print_stack_frame (selected_frame, selected_frame_level, 1); +} + +static void +kcore_detach (args, from_tty) + char *args; + int from_tty; +{ + if (args) + error ("Too many arguments"); + unpush_target (&kcore_ops); + reinit_frame_cache (); + if (from_tty) + printf_filtered ("No kernel core file now.\n"); +} + +/* Get the registers out of a core file. This is the machine- + independent part. Fetch_core_registers is the machine-dependent + part, typically implemented in the xm-file for each architecture. */ + +/* We just get all the registers, so we don't use regno. */ +/* ARGSUSED */ + +#define PCB_ADDR(uptr) ((char *)uptr + UPAGES * PAGE_SIZE - sizeof(struct pcb)) + +static void +get_kcore_registers (int regno) +{ + struct user *uaddr; + struct thread *td; + void *pcb; + + /* find the pcb for the current process */ + if (cur_proc == NULL) + error ("cur_proc is NULL"); + if (kvread(&cur_proc->p_thread, &td)) + error ("cannot read cur_proc->p_thread at %p", cur_proc); + if (kvread(&td->td_pcb, &pcb)) + error ("cannot read cur_proc->p_thread->td_pcb at %p", td); + if (read_pcb(core_kd, (CORE_ADDR)pcb) < 0) + error ("cannot read pcb at %p", pcb); +} + +static void +kcore_files_info (t) + struct target_ops *t; +{ + printf ("\t`%s'\n", core_file); +} + +static CORE_ADDR +ksym_maxuseraddr() +{ + static CORE_ADDR maxuseraddr; + struct minimal_symbol *sym; + + if (maxuseraddr == 0) + { + sym = lookup_minimal_symbol ("PTmap", NULL, NULL); + if (sym == NULL) { + maxuseraddr = VM_MAXUSER_ADDRESS; + } else { + maxuseraddr = SYMBOL_VALUE_ADDRESS (sym); + } + } + return maxuseraddr; +} + +static int +kcore_xfer_kmem (memaddr, myaddr, len, write, target) + CORE_ADDR memaddr; + char *myaddr; + int len; + int write; + struct target_ops *target; +{ + int ns; + int nu; + + if (memaddr >= ksym_maxuseraddr()) + nu = 0; + else + { + nu = xfer_umem (memaddr, myaddr, len, write); + if (nu <= 0) + return (0); + if (nu == len) + return (nu); + memaddr += nu; + if (memaddr != ksym_maxuseraddr()) + return (nu); + myaddr += nu; + len -= nu; + } + + ns = (write ? kvm_write : kvm_read) (core_kd, memaddr, myaddr, len); + if (ns < 0) + ns = 0; + + return (nu + ns); +} + +static int +xfer_umem (memaddr, myaddr, len, write) + CORE_ADDR memaddr; + char *myaddr; + int len; + int write; /* ignored */ +{ + int n; + struct proc proc; + + if (cur_proc == NULL || kvread (cur_proc, &proc)) + error ("cannot read proc at %#x", cur_proc); + n = kvm_uread (core_kd, &proc, memaddr, myaddr, len) ; + + if (n < 0) + return 0; + return n; +} + +static CORE_ADDR +ksym_kernbase() +{ + static CORE_ADDR kernbase; + struct minimal_symbol *sym; + + if (kernbase == 0) + { + sym = lookup_minimal_symbol ("kernbase", NULL, NULL); + if (sym == NULL) { + kernbase = KERNBASE; + } else { + kernbase = SYMBOL_VALUE_ADDRESS (sym); + } + } + return kernbase; +} + +#define KERNOFF (ksym_kernbase()) +#define INKERNEL(x) ((x) >= KERNOFF) + +static CORE_ADDR sbr; +static CORE_ADDR curpcb; +static int found_pcb; +static int devmem; +static int kfd; +static struct pcb pcb; + +static void +set_proc_cmd (char *arg, int from_tty) +{ + CORE_ADDR paddr; + struct kinfo_proc *kp; + int cnt = 0; + + if (!arg) + error_no_arg ("proc address for new current process"); + if (!kernel_debugging) + error ("not debugging kernel"); + + paddr = (CORE_ADDR)parse_and_eval_address (arg); + /* assume it's a proc pointer if it's in the kernel */ + if (paddr >= kernel_start) { + if (set_proc_context(paddr)) + error("invalid proc address"); + } else { + kp = kvm_getprocs(core_kd, KERN_PROC_PID, paddr, &cnt); + if (!cnt) + error("invalid pid"); + if (set_proc_context((CORE_ADDR)kp->kp_eproc.e_paddr)) + error("invalid proc address"); + } +} + +static CORE_ADDR +findpcb(int cfd) +{ + CORE_ADDR td_ptr_addr; + CORE_ADDR td_ptr; + CORE_ADDR pcb_ptr_addr; + CORE_ADDR pcb_ptr; + + td_ptr_addr = prv_start + offsetof(struct mdglobaldata, mi.gd_curthread); + td_ptr_addr = kvtophys(cfd, td_ptr_addr); + physrd(cfd, td_ptr_addr, (char *)&td_ptr, sizeof(CORE_ADDR)); + pcb_ptr_addr = td_ptr + offsetof(struct thread, td_pcb); + pcb_ptr_addr = kvtophys(cfd, pcb_ptr_addr); + physrd(cfd, pcb_ptr_addr, (char *)&pcb_ptr, sizeof(CORE_ADDR)); + return(pcb_ptr); +} + +static void +set_cpu_cmd (arg, from_tty) + char *arg; + int from_tty; +{ + CORE_ADDR paddr; + struct kinfo_proc *kp; + int cpu, cfd; + + if (!arg) + error_no_arg ("cpu number"); + if (!kernel_debugging) + error ("not debugging kernel"); + if (!ncpus) + error ("not debugging SMP kernel"); + + cpu = (int)parse_and_eval_address (arg); + if (cpu < 0 || cpu > ncpus) + error ("cpu number out of range"); + cpuid = cpu; + + cfd = core_kd; + curpcb = findpcb(cfd); + + if (!devmem) + paddr = ksym_lookup ("dumppcb") - KERNOFF; + else + paddr = kvtophys (cfd, curpcb); + read_pcb (cfd, paddr); + printf ("initial pcb at %lx\n", (unsigned long)paddr); + + if ((cur_proc = curProc())) + target_fetch_registers (-1); + + /* Now, set up the frame cache, and print the top of stack */ + flush_cached_frames (); + set_current_frame (create_new_frame (read_fp (), read_pc ())); + select_frame (get_current_frame (), 0); + print_stack_frame (selected_frame, selected_frame_level, 1); +} + +/* substitutes for the stuff in libkvm which doesn't work */ +/* most of this was taken from the old kgdb */ + +/* we don't need all this stuff, but the call should look the same */ + +static int +kvm_open (efile, cfile, sfile, perm, errout) + const char *efile; + char *cfile; + char *sfile; /* makes this kvm_open more compatible to the one in libkvm */ + int perm; + char *errout; /* makes this kvm_open more compatible to the one in libkvm */ +{ + struct stat stb; + int cfd; + CORE_ADDR paddr; + + if ((cfd = open (cfile, perm, 0)) < 0) + return (cfd); + + fstat (cfd, &stb); + if ((stb.st_mode & S_IFMT) == S_IFCHR + && stb.st_rdev == makedev (2, 0)) + { + devmem = 1; + kfd = open (_PATH_KMEM, perm, 0); + } + + /* + * Both UP and SMP use CPU_prvspace. + */ + + physrd(cfd, ksym_lookup("ncpus") - KERNOFF, (char *)&ncpus, sizeof(ncpus)); + prv_space = ksym_lookup("CPU_prvspace"); + prv_space_size = (int)ksym_lookup("gd_idlestack_top"); + printf("%d cpu%s [%08x,%d]\n", ncpus, (ncpus == 1 ? "" : "s"), prv_space, prv_space_size); + cpuid = 0; + + physrd (cfd, ksym_lookup ("IdlePTD") - KERNOFF, (char*)&sbr, sizeof sbr); + printf ("IdlePTD at phsyical address 0x%08lx\n", (unsigned long)sbr); + curpcb = findpcb(cfd); + + found_pcb = 1; /* for vtophys */ + if (!devmem) + paddr = ksym_lookup ("dumppcb") - KERNOFF; + else + paddr = kvtophys (cfd, curpcb); + read_pcb (cfd, paddr); + printf ("initial pcb at physical address 0x%08lx\n", (unsigned long)paddr); + + return (cfd); +} + +static int +kvm_close (fd) + int fd; +{ + return (close (fd)); +} + +static int +kvm_write (core_kd, memaddr, myaddr, len) + int core_kd; + CORE_ADDR memaddr; + char *myaddr; +{ + int cc; + + if (devmem) + { + if (kfd > 0) + { + /* + * Just like kvm_read, only we write. + */ + errno = 0; + if (lseek (kfd, (off_t)memaddr, 0) < 0 + && errno != 0) + { + error ("kvm_write:invalid address (%x)", memaddr); + return (0); + } + cc = write (kfd, myaddr, len); + if (cc < 0) + { + error ("kvm_write:write failed"); + return (0); + } + else if (cc < len) + error ("kvm_write:short write"); + return (cc); + } + else + return (0); + } + else + { + printf ("kvm_write not implemented for dead kernels\n"); + return (0); + } + /* NOTREACHED */ +} + +static int +kvm_read (core_kd, memaddr, myaddr, len) + int core_kd; + CORE_ADDR memaddr; + char *myaddr; +{ + return (kernel_core_file_hook (core_kd, memaddr, myaddr, len)); +} + +static int +kvm_uread (core_kd, p, memaddr, myaddr, len) + int core_kd; + register struct proc *p; + CORE_ADDR memaddr; + char *myaddr; + int len; +{ + register char *cp; + char procfile[MAXPATHLEN]; + ssize_t amount; + int fd; + + if (devmem) + { + sprintf (procfile, "/proc/%d/mem", p->p_pid); + fd = open (procfile, O_RDONLY, 0); + if (fd < 0) + { + error ("cannot open %s", procfile); + close (fd); + return (0); + } + + cp = myaddr; + while (len > 0) + { + errno = 0; + if (lseek (fd, (off_t)memaddr, 0) == -1 && errno != 0) + { + error ("invalid address (%x) in %s", memaddr, procfile); + break; + } + amount = read (fd, cp, len); + if (amount < 0) + { + error ("error reading %s", procfile); + break; + } + if (amount == 0) + { + error ("EOF reading %s", procfile); + break; + } + cp += amount; + memaddr += amount; + len -= amount; + } + + close (fd); + return ((ssize_t) (cp - myaddr)); + } + else + return (kernel_core_file_hook (core_kd, memaddr, myaddr, len)); +} + +static struct kinfo_proc kp; + +/* + * try to do what kvm_proclist in libkvm would do + */ +static int +kvm_proclist (cfd, pid, p, cnt) +int cfd, pid, *cnt; +struct proc *p; +{ + struct proc lp; + + for (; p != NULL; p = lp.p_list.le_next) { + if (!kvm_read(cfd, (CORE_ADDR)p, (char *)&lp, sizeof (lp))) + return (0); + if (lp.p_pid != pid) + continue; + kp.kp_eproc.e_paddr = p; + *cnt = 1; + return (1); + } + *cnt = 0; + return (0); +} + +/* + * try to do what kvm_deadprocs in libkvm would do + */ +static struct kinfo_proc * +kvm_deadprocs (cfd, pid, cnt) +int cfd, pid, *cnt; +{ + CORE_ADDR allproc, zombproc; + struct proc *p; + + allproc = ksym_lookup("allproc"); + if (kvm_read(cfd, allproc, (char *)&p, sizeof (p)) == 0) + return (NULL); + kvm_proclist (cfd, pid, p, cnt); + if (!*cnt) { + zombproc = ksym_lookup("zombproc"); + if (kvm_read(cfd, zombproc, (char *)&p, sizeof (p)) == 0) + return (NULL); + kvm_proclist (cfd, pid, p, cnt); + } + return (&kp); +} + +/* + * try to do what kvm_getprocs in libkvm would do + */ +static struct kinfo_proc * +kvm_getprocs (cfd, op, proc, cnt) +int cfd, op, *cnt; +CORE_ADDR proc; +{ + int mib[4], size; + + *cnt = 0; + /* assume it's a pid */ + if (devmem) { /* "live" kernel, use sysctl */ + mib[0] = CTL_KERN; + mib[1] = KERN_PROC; + mib[2] = KERN_PROC_PID; + mib[3] = (int)proc; + size = sizeof (kp); + if (sysctl (mib, 4, &kp, &size, NULL, 0) < 0) { + perror("sysctl"); + *cnt = 0; + return (NULL); + } + if (!size) + *cnt = 0; + else + *cnt = 1; + return (&kp); + } else + return (kvm_deadprocs (cfd, (int)proc, cnt)); +} + +static int +physrd (cfd, addr, dat, len) + int cfd; + u_int addr; + char *dat; + int len; +{ + if (lseek (cfd, (off_t)addr, L_SET) == -1) + return (-1); + return (read (cfd, dat, len)); +} + +static CORE_ADDR +kvtophys (fd, addr) + int fd; + CORE_ADDR addr; +{ + CORE_ADDR v; + unsigned int pte; + static CORE_ADDR PTD = -1; + CORE_ADDR current_ptd; + + /* + * We may no longer have a linear system page table... + * + * Here's the scoop. IdlePTD contains the physical address + * of a page table directory that always maps the kernel. + * IdlePTD is in memory that is mapped 1-to-1, so we can + * find it easily given its 'virtual' address from ksym_lookup(). + * For hysterical reasons, the value of IdlePTD is stored in sbr. + * + * To look up a kernel address, we first convert it to a 1st-level + * address and look it up in IdlePTD. This gives us the physical + * address of a page table page; we extract the 2nd-level part of + * VA and read the 2nd-level pte. Finally, we add the offset part + * of the VA into the physical address from the pte and return it. + * + * User addresses are a little more complicated. If we don't have + * a current PCB from read_pcb(), we use PTD, which is the (fixed) + * virtual address of the current ptd. Since it's NOT in 1-to-1 + * kernel space, we must look it up using IdlePTD. If we do have + * a pcb, we get the ptd from pcb_ptd. + */ + + if (INKERNEL (addr)) + current_ptd = sbr; + else if (found_pcb == 0) + { + if (PTD == -1) + PTD = kvtophys (fd, ksym_lookup ("PTD")); + current_ptd = PTD; + } + else + current_ptd = pcb.pcb_cr3; + + /* + * Read the first-level page table (ptd). + */ + v = current_ptd + ( (unsigned)addr >> PDRSHIFT) * sizeof pte; + if (physrd (fd, v, (char *)&pte, sizeof pte) < 0 || (pte&PG_V) == 0) + return (~0); + + if (pte & PG_PS) + { + /* + * No second-level page table; ptd describes one 4MB page. + * (We assume that the kernel wouldn't set PG_PS without enabling + * it cr0, and that the kernel doesn't support 36-bit physical + * addresses). + */ +#define PAGE4M_MASK (NBPDR - 1) +#define PG_FRAME4M (~PAGE4M_MASK) + addr = (pte & PG_FRAME4M) + (addr & PAGE4M_MASK); + } + else + { + /* + * Read the second-level page table. + */ + v = (pte&PG_FRAME) + ((addr >> PAGE_SHIFT)&(NPTEPG-1)) * sizeof pte; + if (physrd (fd, v, (char *) &pte, sizeof (pte)) < 0 || (pte&PG_V) == 0) + return (~0); + + addr = (pte & PG_FRAME) + (addr & PAGE_MASK); + } +#if 0 + printf ("vtophys (%x) -> %x\n", oldaddr, addr); +#endif + return (addr); +} + +static int +read_pcb (int fd, CORE_ADDR pcbaddr) +{ + int i; + int noreg; + CORE_ADDR npcbaddr; + + /* need this for the `proc' command to work */ + /* this is a bad hack XXX */ + if (INKERNEL(pcbaddr)) + npcbaddr = kvtophys(fd, pcbaddr); + else + npcbaddr = pcbaddr; + + if (physrd (fd, (CORE_ADDR)npcbaddr, (char *)&pcb, sizeof pcb) < 0) { + error ("cannot read pcb at %x\n", pcbaddr); + return (-1); + } + printf("PCB EIP=%08x ESP=%08x EBP=%08x\n", pcb.pcb_eip, pcb.pcb_esp, pcb.pcb_ebp); + + /* + * get the register values out of the sys pcb and + * store them where `read_register' will find them. + */ + /* + * XXX many registers aren't available. + * XXX for the non-core case, the registers are stale - they are for + * the last context switch to the debugger. + * XXX gcc's register numbers aren't all #defined in tm-i386.h. + */ + noreg = 0; + for (i = 0; i < 3; ++i) /* eax,ecx,edx */ + supply_register (i, (char *)&noreg); + supply_register (3, (char *)&pcb.pcb_ebx); + supply_register (SP_REGNUM, (char *)&pcb.pcb_esp); + supply_register (FP_REGNUM, (char *)&pcb.pcb_ebp); + supply_register (6, (char *)&pcb.pcb_esi); + supply_register (7, (char *)&pcb.pcb_edi); + supply_register (PC_REGNUM, (char *)&pcb.pcb_eip); + for (i = 9; i < 14; ++i) /* eflags, cs, ss, ds, es, fs */ + supply_register (i, (char *)&noreg); + supply_register (15, (char *)&pcb.pcb_gs); + + /* XXX 80387 registers? */ +} + +/* + * read len bytes from kernel virtual address 'addr' into local + * buffer 'buf'. Return numbert of bytes if read ok, 0 otherwise. On read + * errors, portion of buffer not read is zeroed. + */ + +static int +kernel_core_file_hook (fd, addr, buf, len) + int fd; + CORE_ADDR addr; + char *buf; + int len; +{ + int i; + CORE_ADDR paddr; + register char *cp; + int cc; + + cp = buf; + + while (len > 0) + { + paddr = kvtophys (fd, addr); + if (paddr == ~0) + { + memset (buf, '\000', len); + break; + } + /* we can't read across a page boundary */ + i = min (len, PAGE_SIZE - (addr & PAGE_MASK)); + if ( (cc = physrd (fd, paddr, cp, i)) <= 0) + { + memset (cp, '\000', len); + return (cp - buf); + } + cp += cc; + addr += cc; + len -= cc; + } + return (cp - buf); +} + +static struct target_ops kcore_ops; + +void +_initialize_kcorelow() +{ + kcore_ops.to_shortname = "kcore"; + kcore_ops.to_longname = "Kernel core dump file"; + kcore_ops.to_doc = + "Use a core file as a target. Specify the filename of the core file."; + kcore_ops.to_open = kcore_open; + kcore_ops.to_close = kcore_close; + kcore_ops.to_attach = find_default_attach; + kcore_ops.to_detach = kcore_detach; + kcore_ops.to_fetch_registers = get_kcore_registers; + kcore_ops.to_xfer_memory = kcore_xfer_kmem; + kcore_ops.to_files_info = kcore_files_info; + kcore_ops.to_create_inferior = find_default_create_inferior; + kcore_ops.to_stratum = kcore_stratum; + kcore_ops.to_has_memory = 1; + kcore_ops.to_has_stack = 1; + kcore_ops.to_has_registers = 1; + kcore_ops.to_magic = OPS_MAGIC; + + add_target (&kcore_ops); + add_com ("proc", class_obscure, set_proc_cmd, "Set current process context"); + add_com ("cpu", class_obscure, set_cpu_cmd, "Set current cpu"); +} diff --git a/gnu/usr.bin/binutils214/gdb/i386/nm.h b/gnu/usr.bin/binutils214/gdb/i386/nm.h new file mode 100644 index 0000000000..646a73d0af --- /dev/null +++ b/gnu/usr.bin/binutils214/gdb/i386/nm.h @@ -0,0 +1,171 @@ +/* + * $FreeBSD: src/gnu/usr.bin/binutils/gdb/i386/nm.h,v 1.9.4.1 2000/08/22 12:28:19 joerg Exp $ + * $DragonFly: src/gnu/usr.bin/binutils214/gdb/i386/Attic/nm.h,v 1.1 2004/02/01 08:53:04 dillon Exp $ + */ +/* Native-dependent definitions for Intel 386 running BSD Unix, for GDB. + Copyright 1986, 1987, 1989, 1992, 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. */ + +#ifndef NM_FREEBSD_H +#define NM_FREEBSD_H + +#define ATTACH_DETACH + +/* Be shared lib aware */ +#include "solib.h" +#ifdef FREEBSD_ELF +#define SVR4_SHARED_LIBS +#endif + +/* This is the amount to subtract from u.u_ar0 + to get the offset in the core file of the register values. */ + +#include +#define KERNEL_U_ADDR USRSTACK + +#define REGISTER_U_ADDR(addr, blockend, regno) \ + (addr) = i386_register_u_addr ((blockend),(regno)); + +/* We define our own fetch/store methods */ +#define FETCH_INFERIOR_REGISTERS + +extern int +i386_register_u_addr PARAMS ((int, int)); + +#define PTRACE_ARG3_TYPE char* + +#ifndef FREEBSD_ELF + +/* make structure definitions match up with those expected in solib.c */ +#define link_object sod +#define lo_name sod_name +#define lo_library sod_library +#define lo_unused sod_reserved +#define lo_major sod_major +#define lo_minor sod_minor +#define lo_next sod_next + +#define link_map so_map +#define lm_addr som_addr +#define lm_name som_path +#define lm_next som_next +#define lm_lop som_sod +#define lm_lob som_sodbase +#define lm_rwt som_write +#define lm_ld som_dynamic +#define lm_lpd som_spd + +#define link_dynamic_2 section_dispatch_table +#define ld_loaded sdt_loaded +#define ld_need sdt_sods +#define ld_rules sdt_filler1 +#define ld_got sdt_got +#define ld_plt sdt_plt +#define ld_rel sdt_rel +#define ld_hash sdt_hash +#define ld_stab sdt_nzlist +#define ld_stab_hash sdt_filler2 +#define ld_buckets sdt_buckets +#define ld_symbols sdt_strings +#define ld_symb_size sdt_str_sz +#define ld_text sdt_text_sz +#define ld_plt_sz sdt_plt_sz + +#define rtc_symb rt_symbol +#define rtc_sp rt_sp +#define rtc_next rt_next + +#define ld_debug so_debug +#define ldd_version dd_version +#define ldd_in_debugger dd_in_debugger +#define ldd_sym_loaded dd_sym_loaded +#define ldd_bp_addr dd_bpt_addr +#define ldd_bp_inst dd_bpt_shadow +#define ldd_cp dd_cc + +#define link_dynamic _dynamic +#define ld_version d_version +#define ldd d_debug +#define ld_un d_un +#define ld_2 d_sdt + +#endif + +/* Return sizeof user struct to callers in less machine dependent routines */ + +#define KERNEL_U_SIZE kernel_u_size() +extern int kernel_u_size PARAMS ((void)); + +#define ADDITIONAL_OPTIONS \ + {"kernel", no_argument, &kernel_debugging, 1}, \ + {"k", no_argument, &kernel_debugging, 1}, \ + {"wcore", no_argument, &kernel_writablecore, 1}, \ + {"w", no_argument, &kernel_writablecore, 1}, + +#define ADDITIONAL_OPTION_HELP \ + "\ + --kernel Enable kernel debugging.\n\ + --wcore Make core file writable (only works for /dev/mem).\n\ + This option only works while debugging a kernel !!\n\ +" + +extern int kernel_debugging; +extern int kernel_writablecore; + +#define DEFAULT_PROMPT kernel_debugging?"(kgdb) ":"(gdb) " + +/* misuse START_PROGRESS to test whether we're running as kgdb */ +/* START_PROGRESS is called at the top of main */ +#undef START_PROGRESS +#define START_PROGRESS(STR,N) \ + if (!strcmp(STR, "kgdb")) \ + kernel_debugging = 1; + +#include +#include + +#ifdef PT_GETDBREGS +#define TARGET_HAS_HARDWARE_WATCHPOINTS + +extern int can_watch PARAMS((int type, int cnt, int othertype)); +extern int stopped_by_watchpoint PARAMS((void)); +extern int insert_watchpoint PARAMS((int addr, int len, int type)); +extern int remove_watchpoint PARAMS((int addr, int len, int type)); + +#define TARGET_CAN_USE_HARDWARE_WATCHPOINT(type, cnt, ot) \ + can_watch(type, cnt, ot) + +/* After a watchpoint trap, the PC points to the instruction after + the one that caused the trap. Therefore we don't need to step over it. + But we do need to reset the status register to avoid another trap. */ +#define HAVE_CONTINUABLE_WATCHPOINT + +#define STOPPED_BY_WATCHPOINT(W) \ + stopped_by_watchpoint() + +/* Use these macros for watchpoint insertion/removal. */ + +#define target_insert_watchpoint(addr, len, type) \ + insert_watchpoint(addr, len, type) + +#define target_remove_watchpoint(addr, len, type) \ + remove_watchpoint(addr, len, type) + +#endif /* PT_GETDBREGS */ + +#endif /* NM_FREEBSD_H */ diff --git a/gnu/usr.bin/binutils214/gdb/i386/tm.h b/gnu/usr.bin/binutils214/gdb/i386/tm.h new file mode 100644 index 0000000000..e95df70a94 --- /dev/null +++ b/gnu/usr.bin/binutils214/gdb/i386/tm.h @@ -0,0 +1,69 @@ +/* + * $FreeBSD: src/gnu/usr.bin/binutils/gdb/i386/tm.h,v 1.12.2.1 2000/07/06 21:56:42 obrien Exp $ + * $DragonFly: src/gnu/usr.bin/binutils214/gdb/i386/Attic/tm.h,v 1.1 2004/02/01 08:53:04 dillon Exp $ + */ +/* Target macro definitions for i386 running FreeBSD + Copyright (C) 1997 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ + +#ifndef TM_FBSD_H +#define TM_FBSD_H 1 + +#include "i386/tm-i386bsd.h" + +#undef NUM_REGS +#define NUM_REGS 16 + +extern struct frame_info *setup_arbitrary_frame PARAMS ((int, CORE_ADDR *)); + +#define SETUP_ARBITRARY_FRAME(argc, argv) setup_arbitrary_frame (argc, argv) + +extern void i386_float_info PARAMS ((void)); + +#define FLOAT_INFO i386_float_info () + +#define IN_SOLIB_CALL_TRAMPOLINE(pc, name) STREQ (name, "_DYNAMIC") + +/* Saved Pc. Get it from sigcontext if within sigtramp. */ + +extern CORE_ADDR fbsd_kern_frame_saved_pc (struct frame_info *); +#undef FRAME_SAVED_PC +#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)) \ + )) + +/* 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 + +struct objfile; +void freebsd_uthread_new_objfile PARAMS ((struct objfile *objfile)); +#define target_new_objfile(OBJFILE) freebsd_uthread_new_objfile (OBJFILE) + +extern char *freebsd_uthread_pid_to_str PARAMS ((int pid)); +#define target_pid_to_str(PID) freebsd_uthread_pid_to_str (PID) + +#endif /* ifndef TM_FBSD_H */ diff --git a/gnu/usr.bin/binutils214/gdb/i386/version.c b/gnu/usr.bin/binutils214/gdb/i386/version.c new file mode 100644 index 0000000000..23a23ffbc8 --- /dev/null +++ b/gnu/usr.bin/binutils214/gdb/i386/version.c @@ -0,0 +1,7 @@ +/* + * $FreeBSD: src/gnu/usr.bin/binutils/gdb/i386/version.c,v 1.4.4.1 2002/05/14 21:20:51 mp Exp $ + * $DragonFly: src/gnu/usr.bin/binutils214/gdb/i386/Attic/version.c,v 1.1 2004/02/01 08:53:04 dillon Exp $ + */ +char *version = "4.18 (FreeBSD)"; +char *host_name = "i386-unknown-dragonfly"; +char *target_name = "i386-unknown-dragonfly"; diff --git a/gnu/usr.bin/binutils214/gdb/i386/xm.h b/gnu/usr.bin/binutils214/gdb/i386/xm.h new file mode 100644 index 0000000000..dee2429c4c --- /dev/null +++ b/gnu/usr.bin/binutils214/gdb/i386/xm.h @@ -0,0 +1,24 @@ +/* Host-dependent definitions for Intel 386 running BSD Unix, for GDB. + Copyright 1986, 1987, 1989, 1992 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. */ +/* $DragonFly: src/gnu/usr.bin/binutils214/gdb/i386/Attic/xm.h,v 1.1 2004/02/01 08:53:04 dillon Exp $ */ + +#define HOST_BYTE_ORDER LITTLE_ENDIAN + +#include /* for INT_MIN, to avoid "INT_MIN + redefined" warnings from defs.h */ diff --git a/gnu/usr.bin/binutils214/gdb/wait.h b/gnu/usr.bin/binutils214/gdb/wait.h new file mode 100644 index 0000000000..472e147f41 --- /dev/null +++ b/gnu/usr.bin/binutils214/gdb/wait.h @@ -0,0 +1,8 @@ +/* + * WAIT.H + * + * $DragonFly: src/gnu/usr.bin/binutils214/gdb/Attic/wait.h,v 1.1 2004/02/01 08:53:04 dillon Exp $ + * + * (empty) + */ + diff --git a/gnu/usr.bin/binutils214/gdbreplay/Makefile b/gnu/usr.bin/binutils214/gdbreplay/Makefile new file mode 100644 index 0000000000..c70a24ab78 --- /dev/null +++ b/gnu/usr.bin/binutils214/gdbreplay/Makefile @@ -0,0 +1,24 @@ +# $FreeBSD: src/gnu/usr.bin/binutils/gdbreplay/Makefile,v 1.6 1999/08/27 23:34:50 peter Exp $ +# $DragonFly: src/gnu/usr.bin/binutils214/gdbreplay/Attic/Makefile,v 1.1 2004/02/01 08:53:04 dillon Exp $ + +.include "../Makefile.inc0" + +# Not elf specific so don't install in /usr/libexec/elf +BINDIR=/usr/bin + +GDBDIR= ${.CURDIR}/../../../../contrib/gdb +.PATH: ${GDBDIR}/gdb/gdbserver +.PATH: ${GDBDIR}/gdb + +PROG= gdbreplay +NOMAN= yes + +SRCS= gdbreplay.c + +CFLAGS+= -I${.CURDIR}/../gdb/${MACHINE_ARCH} +CFLAGS+= -I${GDBDIR}/gdb +CFLAGS+= -I${GDBDIR}/gdb/config +CFLAGS+= -I${GDBDIR}/gdb/gdbserver +CFLAGS+= -DNO_MMALLOC + +.include diff --git a/gnu/usr.bin/binutils214/gdbserver/Makefile b/gnu/usr.bin/binutils214/gdbserver/Makefile new file mode 100644 index 0000000000..225b4dbac3 --- /dev/null +++ b/gnu/usr.bin/binutils214/gdbserver/Makefile @@ -0,0 +1,24 @@ +# $FreeBSD: src/gnu/usr.bin/binutils/gdbserver/Makefile,v 1.6 1999/08/27 23:34:51 peter Exp $ +# $DragonFly: src/gnu/usr.bin/binutils214/gdbserver/Attic/Makefile,v 1.1 2004/02/01 08:53:04 dillon Exp $ + +.include "../Makefile.inc0" + +# Not elf specific so don't install in /usr/libexec/elf +BINDIR=/usr/bin + +GDBDIR= ${.CURDIR}/../../../../contrib/gdb +.PATH: ${GDBDIR}/gdb/gdbserver +.PATH: ${GDBDIR}/gdb + +PROG= gdbserver + +SRCS= remote-utils.c utils.c server.c +SRCS+= low-fbsd.c + +CFLAGS+= -I${.CURDIR}/../gdb/${MACHINE_ARCH} +CFLAGS+= -I${GDBDIR}/gdb +CFLAGS+= -I${GDBDIR}/gdb/config +CFLAGS+= -I${GDBDIR}/gdb/gdbserver +CFLAGS+= -DNO_MMALLOC + +.include diff --git a/gnu/usr.bin/binutils214/gdbserver/low-fbsd.c b/gnu/usr.bin/binutils214/gdbserver/low-fbsd.c new file mode 100644 index 0000000000..4863394074 --- /dev/null +++ b/gnu/usr.bin/binutils214/gdbserver/low-fbsd.c @@ -0,0 +1,342 @@ +/* Low level interface to ptrace, for the remote server for GDB. + Copyright (C) 1995 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. */ +/* + * $DragonFly: src/gnu/usr.bin/binutils214/gdbserver/Attic/low-fbsd.c,v 1.1 2004/02/01 08:53:04 dillon Exp $ + */ + +#include "defs.h" +#include +#include "frame.h" +#include "inferior.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/***************Begin MY defs*********************/ +int quit_flag = 0; +char registers[REGISTER_BYTES]; + +/* Index within `registers' of the first byte of the space for + register N. */ + + +char buf2[MAX_REGISTER_RAW_SIZE]; +/***************End MY defs*********************/ + +#include +#include + +extern char **environ; +extern int inferior_pid; +void quit (), perror_with_name (); +int query (); + +/* Start an inferior process and returns its pid. + ALLARGS is a vector of program-name and args. + ENV is the environment vector to pass. */ + +int +create_inferior (program, allargs) + char *program; + char **allargs; +{ + int pid; + + pid = fork (); + if (pid < 0) + perror_with_name ("fork"); + + if (pid == 0) + { + ptrace (PT_TRACE_ME, 0, 0, 0); + + execv (program, allargs); + + fprintf (stderr, "Cannot exec %s: %s.\n", program, strerror(errno)); + fflush (stderr); + _exit (0177); + } + + return pid; +} + +/* Kill the inferior process. Make us have no inferior. */ + +void +kill_inferior () +{ + if (inferior_pid == 0) + return; + ptrace (PT_KILL, inferior_pid, 0, 0); + wait (0); + /*************inferior_died ();****VK**************/ +} + +/* Return nonzero if the given thread is still alive. */ +int +mythread_alive (pid) + int pid; +{ + return 1; +} + +/* Wait for process, returns status */ + +unsigned char +mywait (status) + char *status; +{ + int pid; + int w; + + pid = wait (&w); + if (pid != inferior_pid) + perror_with_name ("wait"); + + if (WIFEXITED (w)) + { + fprintf (stderr, "\nChild exited with retcode = %x \n", WEXITSTATUS (w)); + *status = 'W'; + return ((unsigned char) WEXITSTATUS (w)); + } + else if (!WIFSTOPPED (w)) + { + fprintf (stderr, "\nChild terminated with signal = %x \n", WTERMSIG (w)); + *status = 'X'; + return ((unsigned char) WTERMSIG (w)); + } + + fetch_inferior_registers (0); + + *status = 'T'; + return ((unsigned char) WSTOPSIG (w)); +} + +/* Resume execution of the inferior process. + If STEP is nonzero, single-step it. + If SIGNAL is nonzero, give it that signal. */ + +void +myresume (step, signal) + int step; + int signal; +{ + errno = 0; + ptrace (step ? PT_STEP : PT_CONTINUE, inferior_pid, + (PTRACE_ARG3_TYPE) 1, signal); + if (errno) + perror_with_name ("ptrace"); +} + +#if defined(__i386__) + +/* this table must line up with REGISTER_NAMES in tm-i386v.h */ +/* symbols like 'tEAX' come from */ +static int tregmap[] = +{ + tEAX, tECX, tEDX, tEBX, + tESP, tEBP, tESI, tEDI, + tEIP, tEFLAGS, tCS, tSS, + tDS, tES, tFS, tGS, +}; + +static struct save87 pcb_savefpu; + +void +fetch_inferior_registers (regno) + int regno; +{ + struct reg inferior_registers; /* ptrace order, not gcc/gdb order */ + int r; + + ptrace (PT_GETREGS, inferior_pid, + (PTRACE_ARG3_TYPE) &inferior_registers, 0); + + for (r = 0; r < NUM_REGS; r++) + memcpy (®isters[REGISTER_BYTE (r)], ((int *)&inferior_registers) + tregmap[r], 4); +} + +void +store_inferior_registers (regno) + int regno; +{ + struct reg inferior_registers; /* ptrace order, not gcc/gdb order */ + int r; + + ptrace (PT_GETREGS, inferior_pid, + (PTRACE_ARG3_TYPE) &inferior_registers, 0); + + for (r = 0; r < NUM_REGS; r++) + memcpy (((int *)&inferior_registers) + tregmap[r], ®isters[REGISTER_BYTE (r)], 4); + + ptrace (PT_SETREGS, inferior_pid, + (PTRACE_ARG3_TYPE) &inferior_registers, 0); +} + +#elif defined(__alpha__) + +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)); +} + +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); +} + +#endif + + +/* NOTE! I tried using PTRACE_READDATA, etc., to read and write memory + in the NEW_SUN_PTRACE case. + It ought to be straightforward. But it appears that writing did + not write the data that I specified. I cannot understand where + it got the data that it actually did write. */ + +/* Copy LEN bytes from inferior's memory starting at MEMADDR + to debugger memory starting at MYADDR. */ + +read_inferior_memory (memaddr, myaddr, len) + CORE_ADDR memaddr; + char *myaddr; + int len; +{ + register int i; + /* Round starting address down to longword boundary. */ + register CORE_ADDR addr = memaddr & -sizeof (int); + /* Round ending address up; get number of longwords that makes. */ + register int count + = (((memaddr + len) - addr) + sizeof (int) - 1) / sizeof (int); + /* Allocate buffer of that many longwords. */ + register int *buffer = (int *) alloca (count * sizeof (int)); + + /* Read all the longwords */ + for (i = 0; i < count; i++, addr += sizeof (int)) + { + buffer[i] = ptrace (PT_READ_I, inferior_pid, (PTRACE_ARG3_TYPE) addr, 0); + } + + /* Copy appropriate bytes out of the buffer. */ + memcpy (myaddr, (char *) buffer + (memaddr & (sizeof (int) - 1)), len); +} + +/* Copy LEN bytes of data from debugger memory at MYADDR + to inferior's memory at MEMADDR. + On failure (cannot write the inferior) + returns the value of errno. */ + +int +write_inferior_memory (memaddr, myaddr, len) + CORE_ADDR memaddr; + char *myaddr; + int len; +{ + register int i; + /* Round starting address down to longword boundary. */ + register CORE_ADDR addr = memaddr & -sizeof (int); + /* Round ending address up; get number of longwords that makes. */ + register int count + = (((memaddr + len) - addr) + sizeof (int) - 1) / sizeof (int); + /* Allocate buffer of that many longwords. */ + register int *buffer = (int *) alloca (count * sizeof (int)); + extern int errno; + + /* Fill start and end extra bytes of buffer with existing memory data. */ + + buffer[0] = ptrace (PT_READ_I, inferior_pid, + (PTRACE_ARG3_TYPE) addr, 0); + + if (count > 1) + { + buffer[count - 1] + = ptrace (PT_READ_I, inferior_pid, + (PTRACE_ARG3_TYPE) addr + (count - 1) * sizeof (int), 0); + } + + /* Copy data to be written over corresponding part of buffer */ + + memcpy ((char *) buffer + (memaddr & (sizeof (int) - 1)), myaddr, len); + + /* Write the entire buffer. */ + + for (i = 0; i < count; i++, addr += sizeof (int)) + { + errno = 0; + ptrace (PT_WRITE_I, inferior_pid, (PTRACE_ARG3_TYPE) addr, buffer[i]); + if (errno) + return errno; + } + + return 0; +} + +void +initialize () +{ + inferior_pid = 0; +} + +int +have_inferior_p () +{ + return inferior_pid != 0; +} diff --git a/gnu/usr.bin/binutils214/ld/Makefile b/gnu/usr.bin/binutils214/ld/Makefile new file mode 100644 index 0000000000..a97dac647e --- /dev/null +++ b/gnu/usr.bin/binutils214/ld/Makefile @@ -0,0 +1,61 @@ +# $FreeBSD: src/gnu/usr.bin/binutils/ld/Makefile,v 1.8.2.8 2002/09/01 23:39:14 obrien Exp $ +# $DragonFly: src/gnu/usr.bin/binutils214/ld/Attic/Makefile,v 1.1 2004/02/01 08:53:04 dillon Exp $ + +.include "../Makefile.inc0" + +.PATH: ${SRCDIR}/ld + +PROG= ld +SCRIPTDIR= /usr/libexec/binutils214/ldscripts +SRCS+= ldcref.c ldctor.c ldemul.c ldemul-list.h ldexp.c ldfile.c \ + ldgram.y ldlang.c ldlex.l ldmain.c ldmisc.c \ + ldver.c ldwrite.c lexsup.c mri.c + +.if defined(BOOTSTRAPPING) && !exists(/usr/include/elf-hints.h) +SRCS+= elf-hints.h +CLEANFILES+= elf-hints.h + +elf-hints.h: + ln -sf ${.CURDIR}/../../../../include/${.TARGET} . +.endif + +WARNS= 1 +CFLAGS+= -DSCRIPTDIR=\"${TOOLS_PREFIX}/usr/libexec/binutils214\" +CFLAGS+= -DBFD_VERSION_STRING=\"${VERSION}\" +CFLAGS+= -I${SRCDIR}/ld -I${SRCDIR}/bfd -I${.OBJDIR}/../libbfd +CFLAGS+= -DBINDIR=\"${TOOLS_PREFIX}/usr/libexec/binutils214\" +CFLAGS+= -DTOOLBINDIR=\"${TOOLS_PREFIX}/usr/libexec/binutils214\" +NOSHARED?= yes +DPADD= ${RELTOP}/libbfd/libbfd.a +DPADD+= ${RELTOP}/libiberty/libiberty.a +LDADD= ${DPADD} +CLEANDIRS+= ldscripts +CLEANFILES+= ldemul-list.h stringify.sed + +# If set, BINUTILSDISTDIR is the path to a directory containing the full GNU +# binutils release. FreeBSD only distributes the bits that are required to +# build native architectures. BINUTILSDISTDIR is needed to build cross tools. +.if defined(BINUTILSDISTDIR) && exists(${BINUTILSDISTDIR}) +.PATH: ${BINUTILSDISTDIR}/ld +CFLAGS+= -I${BINUTILSDISTDIR}/ld +.endif + +EMXFR= +EMLST= +.for _e in ${EMS} +EMXFR+= extern ld_emulation_xfer_type ld_${_e}_emulation; +EMLST+= &ld_${_e}_emulation, +.endfor + +ldemul-list.h: + echo "${EMXFR}" > ${.TARGET} + echo "#define EMULATION_LIST ${EMLST} 0" >> ${.TARGET} + +stringify.sed: + ln -sf ${SRCDIR}/ld/emultempl/astring.sed ${.TARGET} + +afterinstall: + ${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ + ${LDSCRIPTS:S|^|ldscripts/|} ${DESTDIR}${SCRIPTDIR} + +.include diff --git a/gnu/usr.bin/binutils214/ld/Makefile.i386 b/gnu/usr.bin/binutils214/ld/Makefile.i386 new file mode 100644 index 0000000000..c8bf7ce5b5 --- /dev/null +++ b/gnu/usr.bin/binutils214/ld/Makefile.i386 @@ -0,0 +1,49 @@ +# $FreeBSD: src/gnu/usr.bin/binutils/ld/Makefile.i386,v 1.8.2.5 2002/09/01 23:39:14 obrien Exp $ +# $DragonFly: src/gnu/usr.bin/binutils214/ld/Attic/Makefile.i386,v 1.1 2004/02/01 08:53:04 dillon Exp $ + +TARGET_TUPLE?= i386-unknown-dragonfly + +.if ${TARGET_ARCH} == "i386" +NATIVE_EMULATION= elf_i386 +HOST= ${TARGET_TUPLE} +CFLAGS+= -DDEFAULT_EMULATION=\"${NATIVE_EMULATION}\" +CFLAGS+= -DTARGET=\"${TARGET_TUPLE}\" +_i386_path= ${TOOLS_PREFIX}/usr/lib +.else +_i386_path= /usr/cross/i386-dragonfly/usr/lib +.endif +EMS+= ${NATIVE_EMULATION} +LDSCRIPTS+= ${NATIVE_EMULATION}.x ${NATIVE_EMULATION}.xbn ${NATIVE_EMULATION}.xn ${NATIVE_EMULATION}.xr \ + ${NATIVE_EMULATION}.xs ${NATIVE_EMULATION}.xu ${NATIVE_EMULATION}.xc ${NATIVE_EMULATION}.xsc +SRCS+= e${NATIVE_EMULATION}.c +CLEANFILES+= e${NATIVE_EMULATION}.c + +e${NATIVE_EMULATION}.c: emulparams/${NATIVE_EMULATION}.sh emultempl/elf32.em \ + scripttempl/elf.sc genscripts.sh stringify.sed + sh ${SRCDIR}/ld/genscripts.sh ${SRCDIR}/ld ${_i386_path} \ + "" ${HOST} ${TARGET_TUPLE} ${TARGET_TUPLE} \ + "${NATIVE_EMULATION}" "" no ${NATIVE_EMULATION} "${TARGET_TUPLE}" +# sh ${.CURDIR}/genscripts.sh ${SRCDIR}/ld ${_i386_path} \ +# ${HOST} ${TARGET_TUPLE} ${TARGET_TUPLE} \ +# "${NATIVE_EMULATION}" "" ${NATIVE_EMULATION} "${TARGET_TUPLE}" + +.if defined(BINUTILSDISTDIR) && exists(${BINUTILSDISTDIR}) +EMS+= i386pe +LDSCRIPTS+= i386pe.x \ + i386pe.xbn \ + i386pe.xn \ + i386pe.xr \ + i386pe.xu +SRCS+= ei386pe.c +CLEANFILES+= ei386pe.c + +ei386pe.c: emulparams/i386pe.sh emultempl/pe.em scripttempl/pe.sc \ + genscripts.sh stringify.sed + sh ${SRCDIR}/ld/genscripts.sh ${BINUTILSDISTDIR}/ld \ + /usr/cross/winnt/lib "" ${HOST} ${TARGET_TUPLE}winnt \ + ${TARGET_TUPLE}winnt i386pe "" no i386pe ${TARGET_TUPLE}winnt +# sh ${.CURDIR}/genscripts.sh ${BINUTILSDISTDIR}/ld \ +# /usr/cross/winnt/lib ${HOST} ${TARGET_TUPLE}winnt \ +# ${TARGET_TUPLE}winnt i386pe "" i386pe \ +# ${TARGET_TUPLE}winnt +.endif diff --git a/gnu/usr.bin/binutils214/ld/config.h b/gnu/usr.bin/binutils214/ld/config.h new file mode 100644 index 0000000000..6c5065084f --- /dev/null +++ b/gnu/usr.bin/binutils214/ld/config.h @@ -0,0 +1,177 @@ +/* + * $FreeBSD: src/gnu/usr.bin/binutils/ld/config.h,v 1.2.6.2 2002/09/01 23:39:14 obrien Exp $ + * $DragonFly: src/gnu/usr.bin/binutils214/ld/Attic/config.h,v 1.1 2004/02/01 08:53:04 dillon Exp $ + */ + +/* config.h. Generated automatically by configure. */ +/* config.in. Generated automatically from configure.in by autoheader. */ + +/* Define if using alloca.c. */ +/* #undef C_ALLOCA */ + +/* Define to empty if the keyword does not work. */ +/* #undef const */ + +/* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems. + This function is required for alloca.c support on those systems. */ +/* #undef CRAY_STACKSEG_END */ + +/* Define if you have alloca, as a function or macro. */ +#define HAVE_ALLOCA 1 + +/* Define if you have and it should be used (not on Ultrix). */ +/* #undef HAVE_ALLOCA_H */ + +/* Define if you have a working `mmap' system call. */ +#define HAVE_MMAP 1 + +/* Define as __inline if that's what the C compiler calls it. */ +/* #undef inline */ + +/* Define to `long' if doesn't define. */ +/* #undef off_t */ + +/* Define to `unsigned' if doesn't define. */ +/* #undef size_t */ + +/* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be + automatically deduced at run-time. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown + */ +/* #undef STACK_DIRECTION */ + +/* Define if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Define if lex declares yytext as a char * by default, not a char[]. */ +#define YYTEXT_POINTER 1 + +/* Define if you have the __argz_count function. */ +/* #undef HAVE___ARGZ_COUNT */ + +/* Define if you have the __argz_next function. */ +/* #undef HAVE___ARGZ_NEXT */ + +/* Define if you have the __argz_stringify function. */ +/* #undef HAVE___ARGZ_STRINGIFY */ + +/* Define if you have the dcgettext function. */ +/* #undef HAVE_DCGETTEXT */ + +/* Define if you have the getcwd function. */ +#define HAVE_GETCWD 1 + +/* Define if you have the getpagesize function. */ +#define HAVE_GETPAGESIZE 1 + +/* Define if you have the munmap function. */ +#define HAVE_MUNMAP 1 + +/* Define if you have the putenv function. */ +#define HAVE_PUTENV 1 + +/* Define if you have the sbrk function. */ +#define HAVE_SBRK 1 + +/* Define if you have the setenv function. */ +#define HAVE_SETENV 1 + +/* Define if you have the setlocale function. */ +#define HAVE_SETLOCALE 1 + +/* Define if you have the stpcpy function. */ +/* #undef HAVE_STPCPY */ + +/* Define if you have the strcasecmp function. */ +#define HAVE_STRCASECMP 1 + +/* Define if you have the strchr function. */ +#define HAVE_STRCHR 1 + +/* Define if you have the header file. */ +/* #undef HAVE_ARGZ_H */ + +/* Define if you have the header file. */ +#define HAVE_DIRENT_H 1 + +/* Define if you have the header file. */ +#define HAVE_LIMITS_H 1 + +/* Define if you have the header file. */ +#define HAVE_LOCALE_H 1 + +/* Define if you have the header file. */ +/* #undef HAVE_MALLOC_H */ + +/* Define if you have the header file. */ +/* #undef HAVE_NDIR_H */ + +/* Define if you have the header file. */ +#define HAVE_NL_TYPES_H 1 + +/* Define if you have the header file. */ +#define HAVE_STDLIB_H 1 + +/* Define if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define if you have the header file. */ +#define HAVE_STRINGS_H 1 + +/* Define if you have the header file. */ +/* #undef HAVE_SYS_DIR_H */ + +/* Define if you have the header file. */ +/* #undef HAVE_SYS_NDIR_H */ + +/* Define if you have the header file. */ +#define HAVE_SYS_PARAM_H 1 + +/* Define if you have the header file. */ +#define HAVE_UNISTD_H 1 + +/* Define if you have the header file. */ +/* #undef HAVE_VALUES_H */ + +/* Name of package */ +#define PACKAGE "ld" + +/* Version number of package */ +/* #define VERSION "2.12" */ + +/* Define if you have the stpcpy function */ +/* #undef HAVE_STPCPY */ + +/* Define if your locale.h file contains LC_MESSAGES. */ +#define HAVE_LC_MESSAGES 1 + +/* Define to 1 if NLS is requested */ +/* #define ENABLE_NLS 1 */ + +/* Define as 1 if you have gettext and don't want to use GNU gettext. */ +/* #undef HAVE_GETTEXT */ + +/* Use b modifier when opening binary files? */ +/* #undef USE_BINARY_FOPEN */ + +/* Define if strstr is not declared in system header files. */ +/* #undef NEED_DECLARATION_STRSTR */ + +/* Define if free is not declared in system header files. */ +/* #undef NEED_DECLARATION_FREE */ + +/* Define if sbrk is not declared in system header files. */ +/* #undef NEED_DECLARATION_SBRK */ + +/* Define if getenv is not declared in system header files. */ +/* #undef NEED_DECLARATION_GETENV */ + +/* Define if environ is not declared in system header files. */ +#define NEED_DECLARATION_ENVIRON 1 + +/* Additional extension a shared object might have. */ +/* #undef EXTRA_SHLIB_EXTENSION */ + diff --git a/gnu/usr.bin/binutils214/libbfd/Makefile b/gnu/usr.bin/binutils214/libbfd/Makefile new file mode 100644 index 0000000000..f7b38cb2bd --- /dev/null +++ b/gnu/usr.bin/binutils214/libbfd/Makefile @@ -0,0 +1,93 @@ +# $FreeBSD: src/gnu/usr.bin/binutils/libbfd/Makefile,v 1.9.2.3 2002/09/01 23:39:15 obrien Exp $ +# $DragonFly: src/gnu/usr.bin/binutils214/libbfd/Attic/Makefile,v 1.1 2004/02/01 08:53:04 dillon Exp $ + +.include "../Makefile.inc0" + +.PATH: ${SRCDIR}/bfd ${SRCDIR}/opcodes + +LIB= bfd +SRCS+= archive.c archive64.c archures.c bfd.c bfdio.c binary.c cache.c \ + coffgen.c corefile.c elf.c elf-eh-frame.c elf-strtab.c format.c \ + hash.c ihex.c init.c libbfd.c linker.c merge.c opncls.c reloc.c \ + section.c simple.c srec.c stab-syms.c stabs.c syms.c \ + targets.c tekhex.c \ + targmatch.h dwarf1.c dwarf2.c config.h bfd.h bfdver.h +.if (${TARGET_ARCH} == "alpha" || ${TARGET_ARCH} == "sparc64") +WARNS= 2 +.endif +CFLAGS+= -I${SRCDIR}/bfd +INTERNALLIB= true +CLEANFILES+= bfd.h bfdver.h config.h targmatch.h + +# If set, BINUTILSDISTDIR is the path to a directory containing the full GNU +# binutils release. FreeBSD only distributes the bits that are required to +# build native architectures. BINUTILSDISTDIR is needed to build cross tools. +.if defined(BINUTILSDISTDIR) && exists(${BINUTILSDISTDIR}) +.PATH: ${BINUTILSDISTDIR}/bfd ${BINUTILSDISTDIR}/opcodes +CFLAGS+= -I${BINUTILSDISTDIR}/bfd -I${BINUTILSDISTDIR}/include -I. +.endif + +SELARCH= +.if ${BINUTIL_ARCH} == "sparc64" +SELARCH= &bfd_sparc_arch +.else +.for _a in ${ARCHS} +.if ${SELARCH} == "" +SELARCH+= &bfd_${_a}_arch +.else +SELARCH+= ,&bfd_${_a}_arch +.endif +.endfor +.endif +CFLAGS+= -DSELECT_ARCHITECTURES="${SELARCH}" + +SELVEC= +.for _v in ${VECS} +.if ${SELVEC} == "" +SELVEC+= &${_v} +.else +SELVEC+= ,&${_v} +.endif +.endfor +CFLAGS+= -DSELECT_VECS="${SELVEC}" + +# Used to do keyword replacement in bfd-X.h +# +BFD_ARCH_SIZE?=64 +BFD_DEFAULT_TARGET_SIZE?=64 +.if ${MACHINE_ARCH} == "i386" +BFD_HOST_64BIT_LONG?=0 +.else +BFD_HOST_64BIT_LONG?=1 +.endif +BFD_HOST_64_BIT_DEFINED?=0 + +bfd.h: ${SRCDIR}/bfd/bfd-in2.h + sed -e "s/@wordsize@/${BFD_ARCH_SIZE}/g" \ + -e "s/@bfd_default_target_size@/${BFD_DEFAULT_TARGET_SIZE}/g" \ + -e "s/@BFD_HOST_64BIT_LONG@/${BFD_HOST_64BIT_LONG}/g" \ + -e "s/@BFD_HOST_64_BIT@/${BFD_HOST_64_BIT}/g" \ + -e "s/@BFD_HOST_U_64_BIT@/${BFD_HOST_U_64_BIT}/g" \ + -e "s/@BFD_HOST_64_BIT_DEFINED@/${BFD_HOST_64_BIT_DEFINED}/g" \ + < ${SRCDIR}/bfd/bfd-in2.h > bfd.h.new + mv -f bfd.h.new bfd.h + +bfdver.h: ${SRCDIR}/bfd/version.h + sed -e "s/@bfd_version_string@/\\\"`echo -n ${VERSION}`\\\"/g" \ + -e "s/@bfd_version@/${VERSION_DATE}/g" \ + < ${SRCDIR}/bfd/version.h > bfdver.h.new + mv -f bfdver.h.new bfdver.h + +targmatch.h: targmatch.sed config.bfd dfly_targmatch.h + sed -f ${.ALLSRC:M*.sed} ${.ALLSRC:M*.bfd} > ${.TARGET}.new + cat ${.CURDIR}/dfly_targmatch.h >> ${.TARGET}.new + mv -f ${.TARGET}.new ${.TARGET} + +config.h: config.h.template +.if ${BINUTIL_ARCH} == "i386" + sed -e 's,!!TRAD_HEADER!!,"hosts/i386bsd.h",g' ${.ALLSRC} > ${.TARGET} +.else + sed -e 's,!!TRAD_HEADER!!,,g' ${.ALLSRC} > ${.TARGET} +.endif + +.include diff --git a/gnu/usr.bin/binutils214/libbfd/Makefile.amd64 b/gnu/usr.bin/binutils214/libbfd/Makefile.amd64 new file mode 100644 index 0000000000..45b578967d --- /dev/null +++ b/gnu/usr.bin/binutils214/libbfd/Makefile.amd64 @@ -0,0 +1,7 @@ +# $FreeBSD: src/gnu/usr.bin/binutils/libbfd/Makefile.amd64,v 1.2 2003/07/01 17:29:48 obrien Exp $ +# $DragonFly: src/gnu/usr.bin/binutils214/libbfd/Attic/Makefile.amd64,v 1.1 2004/02/01 08:53:04 dillon Exp $ + +.include "${.CURDIR}/Makefile.i386" + +DEFAULT_VECTOR= bfd_elf64_x86_64_vec + diff --git a/gnu/usr.bin/binutils214/libbfd/Makefile.i386 b/gnu/usr.bin/binutils214/libbfd/Makefile.i386 new file mode 100644 index 0000000000..7562cf1620 --- /dev/null +++ b/gnu/usr.bin/binutils214/libbfd/Makefile.i386 @@ -0,0 +1,49 @@ +# $FreeBSD: src/gnu/usr.bin/binutils/libbfd/Makefile.i386,v 1.8.2.2 2002/09/01 23:39:15 obrien Exp $ +# $DragonFly: src/gnu/usr.bin/binutils214/libbfd/Attic/Makefile.i386,v 1.1 2004/02/01 08:53:04 dillon Exp $ + +# see main Makefile +SRCS+= cpu-i386.c +SRCS+= elf32-i386-fbsd.c elf32-target.h elf32.c elflink.c +SRCS+= elf64-amd64-fbsd.c elf64-target.h elf64-gen.c elf64.c +VECS+= bfd_elf32_i386_vec +VECS+= bfd_elf64_x86_64_vec +.if ${TARGET_ARCH} == "i386" +CFLAGS+= -DDEFAULT_VECTOR=bfd_elf32_i386_vec +.endif +CFLAGS+= -DHAVE_bfd_elf32_i386_vec + +.if defined(BINUTILSDISTDIR) && exists(${BINUTILSDISTDIR}) +SRCS+= pe-i386.c pei-i386.c +VECS+= i386pe_vec i386pei_vec +CFLAGS+= -DHAVE_i386pe_vec -DHAVE_i386pei_vec +.endif + +CLEANFILES+= elf32-target.h + +elf32-target.h: elfxx-target.h + sed -e s/NN/32/g ${.ALLSRC} > ${.TARGET} + +CLEANFILES+= elf64-target.h + +elf64-target.h: elfxx-target.h + sed -e s/NN/64/g ${.ALLSRC} > ${.TARGET} + +CLEANFILES+= elf64-amd64-fbsd.c + +# Make sure generated binaries are properly branded. This is kind of a +# hack but it's more dependable to override whatever binutils thought it +# was going to do then figure out whether binutils supports us natively. +# +elf32-i386-fbsd.c: ${.CURDIR}/elf-fbsd-brand.c ${SRCDIR}/bfd/elf32-i386.c + cat ${.ALLSRC:M*elf-fbsd-brand.c} > ${.TARGET}.new + echo "#define elf_backend_post_process_headers elf_fbsd_post_process_headers" \ + >> ${.TARGET}.new + cat ${.ALLSRC:M*elf32-i386.c} >> ${.TARGET}.new + mv -f ${.TARGET}.new ${.TARGET} + +elf64-amd64-fbsd.c: ${.CURDIR}/elf-fbsd-brand.c ${SRCDIR}/bfd/elf64-x86-64.c + cat ${.ALLSRC:M*elf-fbsd-brand.c} > ${.TARGET}.new + echo "#define elf_backend_post_process_headers elf_fbsd_post_process_headers" \ + >> ${.TARGET}.new + cat ${.ALLSRC:M*elf64-x86-64.c} >> ${.TARGET}.new + mv -f ${.TARGET}.new ${.TARGET} diff --git a/gnu/usr.bin/binutils214/libbfd/config.h.template b/gnu/usr.bin/binutils214/libbfd/config.h.template new file mode 100644 index 0000000000..66d93b2b60 --- /dev/null +++ b/gnu/usr.bin/binutils214/libbfd/config.h.template @@ -0,0 +1,270 @@ +/* + * $FreeBSD: src/gnu/usr.bin/binutils/libbfd/config.h.fbsd,v 1.2.2.1 2002/09/01 23:39:15 obrien Exp $ + * $DragonFly: src/gnu/usr.bin/binutils214/libbfd/Attic/config.h.template,v 1.1 2004/02/01 08:53:04 dillon Exp $ + */ + +/* config.h. Generated automatically by configure. */ +/* config.in. Generated automatically from configure.in by autoheader. */ + +/* Define if using alloca.c. */ +/* #undef C_ALLOCA */ + +/* Define to empty if the keyword does not work. */ +/* #undef const */ + +/* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems. + This function is required for alloca.c support on those systems. */ +/* #undef CRAY_STACKSEG_END */ + +/* Define if you have alloca, as a function or macro. */ +#define HAVE_ALLOCA 1 + +/* Define if you have and it should be used (not on Ultrix). */ +/* #undef HAVE_ALLOCA_H */ + +/* Define if you have a working `mmap' system call. */ +#define HAVE_MMAP 1 + +/* Define as __inline if that's what the C compiler calls it. */ +/* #undef inline */ + +/* Define to `long' if doesn't define. */ +/* #undef off_t */ + +/* Define if you need to in order for stat and other things to work. */ +/* #undef _POSIX_SOURCE */ + +/* Define to `unsigned' if doesn't define. */ +/* #undef size_t */ + +/* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be + automatically deduced at run-time. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown + */ +/* #undef STACK_DIRECTION */ + +/* Define if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Define if you can safely include both and . */ +#define TIME_WITH_SYS_TIME 1 + +/* Define if you have the __argz_count function. */ +/* #undef HAVE___ARGZ_COUNT */ + +/* Define if you have the __argz_next function. */ +/* #undef HAVE___ARGZ_NEXT */ + +/* Define if you have the __argz_stringify function. */ +/* #undef HAVE___ARGZ_STRINGIFY */ + +/* Define if you have the dcgettext function. */ +/* #undef HAVE_DCGETTEXT */ + +/* Define if you have the fcntl function. */ +#define HAVE_FCNTL 1 + +/* Define if you have the fdopen function. */ +#define HAVE_FDOPEN 1 + +/* Define if you have the getcwd function. */ +#define HAVE_GETCWD 1 + +/* Define if you have the getgid function. */ +#define HAVE_GETGID 1 + +/* Define if you have the getpagesize function. */ +#define HAVE_GETPAGESIZE 1 + +/* Define if you have the getuid function. */ +#define HAVE_GETUID 1 + +/* Define if you have the madvise function. */ +#define HAVE_MADVISE 1 + +/* Define if you have the mprotect function. */ +#define HAVE_MPROTECT 1 + +/* Define if you have the munmap function. */ +#define HAVE_MUNMAP 1 + +/* Define if you have the putenv function. */ +#define HAVE_PUTENV 1 + +/* Define if you have the setenv function. */ +#define HAVE_SETENV 1 + +/* Define if you have the setitimer function. */ +#define HAVE_SETITIMER 1 + +/* Define if you have the setlocale function. */ +#define HAVE_SETLOCALE 1 + +/* Define if you have the stpcpy function. */ +/* #undef HAVE_STPCPY */ + +/* Define if you have the strcasecmp function. */ +#define HAVE_STRCASECMP 1 + +/* Define if you have the strchr function. */ +#define HAVE_STRCHR 1 + +/* Define if you have the sysconf function. */ +#define HAVE_SYSCONF 1 + +/* Define if you have the header file. */ +/* #undef HAVE_ARGZ_H */ + +/* Define if you have the header file. */ +#define HAVE_DIRENT_H 1 + +/* Define if you have the header file. */ +#define HAVE_FCNTL_H 1 + +/* Define if you have the header file. */ +#define HAVE_LIMITS_H 1 + +/* Define if you have the header file. */ +#define HAVE_LOCALE_H 1 + +/* Define if you have the header file. */ +/* #undef HAVE_MALLOC_H */ + +/* Define if you have the header file. */ +/* #undef HAVE_NDIR_H */ + +/* Define if you have the header file. */ +#define HAVE_NL_TYPES_H 1 + +/* Define if you have the header file. */ +#define HAVE_STDDEF_H 1 + +/* Define if you have the header file. */ +#define HAVE_STDLIB_H 1 + +/* Define if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define if you have the header file. */ +#define HAVE_STRINGS_H 1 + +/* Define if you have the header file. */ +/* #undef HAVE_SYS_DIR_H */ + +/* Define if you have the header file. */ +#define HAVE_SYS_FILE_H 1 + +/* Define if you have the header file. */ +/* #undef HAVE_SYS_NDIR_H */ + +/* Define if you have the header file. */ +#define HAVE_SYS_PARAM_H 1 + +/* Define if you have the header file. */ +#define HAVE_SYS_PROCFS_H 1 + +/* Define if you have the header file. */ +#define HAVE_SYS_TIME_H 1 + +/* Define if you have the header file. */ +#define HAVE_TIME_H 1 + +/* Define if you have the header file. */ +#define HAVE_UNISTD_H 1 + +/* Define if you have the header file. */ +/* #undef HAVE_VALUES_H */ + +/* Name of package */ +#define PACKAGE "bfd" + +/* Version number of package */ +/* #define VERSION "2.12" */ + +/* Define if you have the stpcpy function */ +/* #undef HAVE_STPCPY */ + +/* Define if your locale.h file contains LC_MESSAGES. */ +#define HAVE_LC_MESSAGES 1 + +/* Define to 1 if NLS is requested */ +/* #define ENABLE_NLS 1 */ + +/* Define as 1 if you have gettext and don't want to use GNU gettext. */ +/* #undef HAVE_GETTEXT */ + +/* Use b modifier when opening binary files? */ +/* #undef USE_BINARY_FOPEN */ + +/* Define if strstr is not declared in system header files. */ +/* #undef NEED_DECLARATION_STRSTR */ + +/* Define if malloc is not declared in system header files. */ +/* #undef NEED_DECLARATION_MALLOC */ + +/* Define if realloc is not declared in system header files. */ +/* #undef NEED_DECLARATION_REALLOC */ + +/* Define if free is not declared in system header files. */ +/* #undef NEED_DECLARATION_FREE */ + +/* Define if getenv is not declared in system header files. */ +/* #undef NEED_DECLARATION_GETENV */ + +/* Define if has prstatus_t. */ +#define HAVE_PRSTATUS_T 1 + +/* Define if has prstatus32_t. */ +/* #undef HAVE_PRSTATUS32_T */ + +/* Define if has prstatus_t.pr_who. */ +/* #undef HAVE_PRSTATUS_T_PR_WHO */ + +/* Define if has prstatus32_t.pr_who. */ +/* #undef HAVE_PRSTATUS32_T_PR_WHO */ + +/* Define if has pstatus_t. */ +/* #undef HAVE_PSTATUS_T */ + +/* Define if has pxstatus_t. */ +/* #undef HAVE_PXSTATUS_T */ + +/* Define if has pstatus32_t. */ +/* #undef HAVE_PSTATUS32_T */ + +/* Define if has prpsinfo_t. */ +#define HAVE_PRPSINFO_T 1 + +/* Define if has prpsinfo32_t. */ +/* #undef HAVE_PRPSINFO32_T */ + +/* Define if has psinfo_t. */ +/* #undef HAVE_PSINFO_T */ + +/* Define if has psinfo32_t. */ +/* #undef HAVE_PSINFO32_T */ + +/* Define if has lwpstatus_t. */ +/* #undef HAVE_LWPSTATUS_T */ + +/* Define if has lwpxstatus_t. */ +/* #undef HAVE_LWPXSTATUS_T */ + +/* Define if has lwpstatus_t.pr_context. */ +/* #undef HAVE_LWPSTATUS_T_PR_CONTEXT */ + +/* Define if has lwpstatus_t.pr_reg. */ +/* #undef HAVE_LWPSTATUS_T_PR_REG */ + +/* Define if has win32_pstatus_t. */ +/* #undef HAVE_WIN32_PSTATUS_T */ + +/* Name of host specific header file to include in trad-core.c. */ +#define TRAD_HEADER !!TRAD_HEADER!! + +/* Use mmap if it's available? */ +/* #undef USE_MMAP */ + diff --git a/gnu/usr.bin/binutils214/libbfd/dfly_targmatch.h b/gnu/usr.bin/binutils214/libbfd/dfly_targmatch.h new file mode 100644 index 0000000000..320cbded12 --- /dev/null +++ b/gnu/usr.bin/binutils214/libbfd/dfly_targmatch.h @@ -0,0 +1,11 @@ +/* + * match targets defined in the assembler's targ-env.h with an output vector. + * XXX i386-*-dragonfly and amd64-*-dragonfly are obsolete, but not quite + * removed from the binutils build yet. + * + * $DragonFly: src/gnu/usr.bin/binutils214/libbfd/Attic/dfly_targmatch.h,v 1.1 2004/02/01 08:53:04 dillon Exp $ + */ +{ "elf32-i386-dragonfly*", &bfd_elf32_i386_vec }, +{ "elf64-amd64-dragonfly*", &bfd_elf64_x86_64_vec }, +{ "i386-*-dragonfly*", &bfd_elf32_i386_vec }, +{ "amd64-*-dragonfly*", &bfd_elf64_x86_64_vec }, diff --git a/gnu/usr.bin/binutils214/libbfd/elf-fbsd-brand.c b/gnu/usr.bin/binutils214/libbfd/elf-fbsd-brand.c new file mode 100644 index 0000000000..46fc280661 --- /dev/null +++ b/gnu/usr.bin/binutils214/libbfd/elf-fbsd-brand.c @@ -0,0 +1,52 @@ +/*- + * Copyright (c) 2002, 2003 David E. O'Brien + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD: src/gnu/usr.bin/binutils/libbfd/elf-fbsd-brand.c,v 1.1 2003/04/26 03:28:21 obrien Exp $ + * $DragonFly: src/gnu/usr.bin/binutils214/libbfd/Attic/elf-fbsd-brand.c,v 1.1 2004/02/01 08:53:04 dillon Exp $ + */ + +#include "bfd.h" +#include "sysdep.h" +#include "elf-bfd.h" + +/* The kernel recognizes executables as valid only if they carry a + "FreeBSD" label in the ELF header. So we put this label on all + executables and (for simplicity) also all other object files. */ + +static void elf_fbsd_post_process_headers + PARAMS ((bfd *, struct bfd_link_info *)); + +static void +elf_fbsd_post_process_headers (abfd, link_info) + bfd * abfd; + struct bfd_link_info * link_info ATTRIBUTE_UNUSED; +{ + Elf_Internal_Ehdr * i_ehdrp; /* ELF file header, internal form. */ + + i_ehdrp = elf_elfheader (abfd); + + /* Put an ABI label supported by FreeBSD >= 4.1. */ + i_ehdrp->e_ident[EI_OSABI] = ELFOSABI_FREEBSD; +} diff --git a/gnu/usr.bin/binutils214/libbinutils/Makefile b/gnu/usr.bin/binutils214/libbinutils/Makefile new file mode 100644 index 0000000000..cb024ea7e5 --- /dev/null +++ b/gnu/usr.bin/binutils214/libbinutils/Makefile @@ -0,0 +1,21 @@ +# $FreeBSD: src/gnu/usr.bin/binutils/libbinutils/Makefile,v 1.8.2.5 2002/09/01 23:39:16 obrien Exp $ +# $DragonFly: src/gnu/usr.bin/binutils214/libbinutils/Attic/Makefile,v 1.1 2004/02/01 08:53:04 dillon Exp $ + +.include "../Makefile.inc0" + +.PATH: ${SRCDIR}/binutils + +LIB= binutils +SRCS+= arlex.l arparse.y ar.c arsup.c binemul.c bucomm.c budemang.c debug.c \ + emul_vanilla.c \ + filemode.c ieee.c rdcoff.c rddbg.c rename.c stabs.c unwind-ia64.c \ + wrstabs.c version.c +WARNS= 0 +CFLAGS+= -DTARGET=\"${TARGET_ARCH}-unknown-dragonfly\" +CFLAGS+= -DBFD_VERSION_STRING=\"${VERSION}\" +CFLAGS+= -Dbin_dummy_emulation=bin_vanilla_emulation +CFLAGS+= -I${SRCDIR}/binutils +CFLAGS+= -I${SRCDIR}/bfd -I${.OBJDIR}/../libbfd +INTERNALLIB= true + +.include diff --git a/gnu/usr.bin/binutils214/libbinutils/Makefile.i386 b/gnu/usr.bin/binutils214/libbinutils/Makefile.i386 new file mode 100644 index 0000000000..921a6dc846 --- /dev/null +++ b/gnu/usr.bin/binutils214/libbinutils/Makefile.i386 @@ -0,0 +1,6 @@ +# +# $FreeBSD: src/gnu/usr.bin/binutils/libbinutils/Makefile.i386,v 1.2.2.2 2001/02/21 21:35:41 obrien Exp $ +# $DragonFly: src/gnu/usr.bin/binutils214/libbinutils/Attic/Makefile.i386,v 1.1 2004/02/01 08:53:04 dillon Exp $ +# + +TARGET= i386-unknown-dragonfly diff --git a/gnu/usr.bin/binutils214/libbinutils/config.h b/gnu/usr.bin/binutils214/libbinutils/config.h new file mode 100644 index 0000000000..762127a41f --- /dev/null +++ b/gnu/usr.bin/binutils214/libbinutils/config.h @@ -0,0 +1,210 @@ +/* + * $FreeBSD: src/gnu/usr.bin/binutils/libbinutils/config.h,v 1.3.6.4 2002/09/01 23:39:16 obrien Exp $ + * $DragonFly: src/gnu/usr.bin/binutils214/libbinutils/Attic/config.h,v 1.1 2004/02/01 08:53:04 dillon Exp $ + */ + +/* config.h. Generated automatically by configure. */ +/* config.in. Generated automatically from configure.in by autoheader. */ + +/* Define if using alloca.c. */ +/* #undef C_ALLOCA */ + +/* Define to empty if the keyword does not work. */ +/* #undef const */ + +/* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems. + This function is required for alloca.c support on those systems. */ +/* #undef CRAY_STACKSEG_END */ + +/* Define if you have alloca, as a function or macro. */ +#define HAVE_ALLOCA 1 + +/* Define if you have and it should be used (not on Ultrix). */ +/* #undef HAVE_ALLOCA_H */ + +/* Define if you have a working `mmap' system call. */ +#define HAVE_MMAP 1 + +/* Define if you have that is POSIX.1 compatible. */ +#define HAVE_SYS_WAIT_H 1 + +/* Define as __inline if that's what the C compiler calls it. */ +/* #undef inline */ + +/* Define to `long' if doesn't define. */ +/* #undef off_t */ + +/* Define to `unsigned' if doesn't define. */ +/* #undef size_t */ + +/* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be + automatically deduced at run-time. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown + */ +/* #undef STACK_DIRECTION */ + +/* Define if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Define if lex declares yytext as a char * by default, not a char[]. */ +#define YYTEXT_POINTER 1 + +/* Define if you have the __argz_count function. */ +/* #undef HAVE___ARGZ_COUNT */ + +/* Define if you have the __argz_next function. */ +/* #undef HAVE___ARGZ_NEXT */ + +/* Define if you have the __argz_stringify function. */ +/* #undef HAVE___ARGZ_STRINGIFY */ + +/* Define if you have the dcgettext function. */ +/* #undef HAVE_DCGETTEXT */ + +/* Define if you have the getc_unlocked function. */ +/* #undef HAVE_GETC_UNLOCKED */ + +/* Define if you have the getcwd function. */ +#define HAVE_GETCWD 1 + +/* Define if you have the getpagesize function. */ +#define HAVE_GETPAGESIZE 1 + +/* Define if you have the munmap function. */ +#define HAVE_MUNMAP 1 + +/* Define if you have the putenv function. */ +#define HAVE_PUTENV 1 + +/* Define if you have the sbrk function. */ +#define HAVE_SBRK 1 + +/* Define if you have the setenv function. */ +#define HAVE_SETENV 1 + +/* Define if you have the setlocale function. */ +#define HAVE_SETLOCALE 1 + +/* Define if you have the setmode function. */ +#define HAVE_SETMODE 1 + +/* Define if you have the stpcpy function. */ +/* #undef HAVE_STPCPY */ + +/* Define if you have the strcasecmp function. */ +#define HAVE_STRCASECMP 1 + +/* Define if you have the strchr function. */ +#define HAVE_STRCHR 1 + +/* Define if you have the utimes function. */ +#define HAVE_UTIMES 1 + +/* Define if you have the header file. */ +/* #undef HAVE_ARGZ_H */ + +/* Define if you have the header file. */ +#define HAVE_FCNTL_H 1 + +/* Define if you have the header file. */ +#define HAVE_LIMITS_H 1 + +/* Define if you have the header file. */ +#define HAVE_LOCALE_H 1 + +/* Define if you have the header file. */ +/* #undef HAVE_MALLOC_H */ + +/* Define if you have the header file. */ +#define HAVE_NL_TYPES_H 1 + +/* Define if you have the header file. */ +#define HAVE_STDLIB_H 1 + +/* Define if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define if you have the header file. */ +#define HAVE_STRINGS_H 1 + +/* Define if you have the header file. */ +#define HAVE_SYS_FILE_H 1 + +/* Define if you have the header file. */ +#define HAVE_SYS_PARAM_H 1 + +/* Define if you have the header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Define if you have the header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define if you have the header file. */ +#define HAVE_UNISTD_H 1 + +/* Define if you have the header file. */ +/* #undef HAVE_VALUES_H */ + +/* Name of package */ +#define PACKAGE "binutils" + +/* Version number of package */ +/* #define VERSION "2.12" */ + +/* Define if you have the stpcpy function */ +/* #undef HAVE_STPCPY */ + +/* Define if your locale.h file contains LC_MESSAGES. */ +#define HAVE_LC_MESSAGES 1 + +/* Define to 1 if NLS is requested */ +/* #define ENABLE_NLS 1 */ + +/* Define as 1 if you have gettext and don't want to use GNU gettext. */ +/* #undef HAVE_GETTEXT */ + +/* Does the platform use an executable suffix? */ +/* #undef HAVE_EXECUTABLE_SUFFIX */ + +/* Suffix used for executables, if any. */ +#define EXECUTABLE_SUFFIX "" + +/* Is fopen64 available? */ +/* #undef HAVE_FOPEN64 */ + +/* Enable LFS */ +/* #undef _LARGEFILE64_SOURCE */ + +/* Is the type time_t defined in ? */ +#define HAVE_TIME_T_IN_TIME_H 1 + +/* Is the type time_t defined in ? */ +#define HAVE_TIME_T_IN_TYPES_H 1 + +/* Does define struct utimbuf? */ +#define HAVE_GOOD_UTIME_H 1 + +/* Define if fprintf is not declared in system header files. */ +/* #undef NEED_DECLARATION_FPRINTF */ + +/* Define if strstr is not declared in system header files. */ +/* #undef NEED_DECLARATION_STRSTR */ + +/* Define if sbrk is not declared in system header files. */ +/* #undef NEED_DECLARATION_SBRK */ + +/* Define if getenv is not declared in system header files. */ +/* #undef NEED_DECLARATION_GETENV */ + +/* Define if environ is not declared in system header files. */ +#define NEED_DECLARATION_ENVIRON 1 + +/* Use b modifier when opening binary files? */ +/* #undef USE_BINARY_FOPEN */ + +/* Configured target name. */ +/* #define TARGET "alpha-unknown-dragonfly5.0" */ + diff --git a/gnu/usr.bin/binutils214/libiberty/Makefile b/gnu/usr.bin/binutils214/libiberty/Makefile new file mode 100644 index 0000000000..4c79698ab7 --- /dev/null +++ b/gnu/usr.bin/binutils214/libiberty/Makefile @@ -0,0 +1,22 @@ +# $FreeBSD: src/gnu/usr.bin/binutils/libiberty/Makefile,v 1.3.2.6 2002/09/01 23:39:16 obrien Exp $ +# $DragonFly: src/gnu/usr.bin/binutils214/libiberty/Attic/Makefile,v 1.1 2004/02/01 08:53:04 dillon Exp $ + +.include "../Makefile.inc0" + +.PATH: ${SRCDIR}/libiberty + +LIB= iberty +SRCS= argv.c choose-temp.c concat.c cp-demangle.c cplus-dem.c \ + dyn-string.c getopt.c getopt1.c getpwd.c getruntime.c \ + hex.c floatformat.c hashtab.c lbasename.c lrealpath.c \ + make-temp-file.c make-relative-prefix.c \ + objalloc.c obstack.c safe-ctype.c xatexit.c xexit.c xmalloc.c \ + xstrdup.c xstrerror.c +.if defined(BOOTSTRAPPING) +SRCS+= basename.c +.endif +WARNS= 1 +CFLAGS+= -DHAVE_CONFIG_H +INTERNALLIB= true + +.include diff --git a/gnu/usr.bin/binutils214/libiberty/alloca-conf.h b/gnu/usr.bin/binutils214/libiberty/alloca-conf.h new file mode 100644 index 0000000000..65d3f35ec1 --- /dev/null +++ b/gnu/usr.bin/binutils214/libiberty/alloca-conf.h @@ -0,0 +1,4 @@ +/* + * $DragonFly: src/gnu/usr.bin/binutils214/libiberty/Attic/alloca-conf.h,v 1.1 2004/02/01 08:53:04 dillon Exp $ + */ +#include diff --git a/gnu/usr.bin/binutils214/libiberty/config.h b/gnu/usr.bin/binutils214/libiberty/config.h new file mode 100644 index 0000000000..6cd37a053c --- /dev/null +++ b/gnu/usr.bin/binutils214/libiberty/config.h @@ -0,0 +1,260 @@ +/* + * $FreeBSD: src/gnu/usr.bin/binutils/libiberty/config.h,v 1.1.1.1.6.3 2002/09/01 23:39:16 obrien Exp $ + * $DragonFly: src/gnu/usr.bin/binutils214/libiberty/Attic/config.h,v 1.1 2004/02/01 08:53:04 dillon Exp $ + */ + +/* config.h. Generated automatically by configure. */ +/* config.in. Generated automatically from configure.in by autoheader 2.13. */ + +/* Define to empty if the keyword does not work. */ +/* #undef const */ + +/* Define if you have a working `mmap' system call. */ +#define HAVE_MMAP 1 + +/* Define if you have that is POSIX.1 compatible. */ +#define HAVE_SYS_WAIT_H 1 + +/* Define if you have . */ +/* #undef HAVE_VFORK_H */ + +/* Define as __inline if that's what the C compiler calls it. */ +/* #undef inline */ + +/* Define to `int' if doesn't define. */ +/* #undef pid_t */ + +/* Define if you need to in order for stat and other things to work. */ +/* #undef _POSIX_SOURCE */ + +/* Define if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Define if you can safely include both and . */ +#define TIME_WITH_SYS_TIME 1 + +/* Define vfork as fork if vfork does not work. */ +/* #undef vfork */ + +/* Define if you have the _doprnt function. */ +/* #undef HAVE__DOPRNT */ + +/* Define if you have the asprintf function. */ +#define HAVE_ASPRINTF 1 + +/* Define if you have the atexit function. */ +#define HAVE_ATEXIT 1 + +/* Define if you have the basename function. */ +#define HAVE_BASENAME 1 + +/* Define if you have the bcmp function. */ +#define HAVE_BCMP 1 + +/* Define if you have the bcopy function. */ +#define HAVE_BCOPY 1 + +/* Define if you have the bsearch function. */ +#define HAVE_BSEARCH 1 + +/* Define if you have the bzero function. */ +#define HAVE_BZERO 1 + +/* Define if you have the calloc function. */ +#define HAVE_CALLOC 1 + +/* Define if you have the clock function. */ +#define HAVE_CLOCK 1 + +/* Define if you have the ffs function. */ +#define HAVE_FFS 1 + +/* Define if you have the getcwd function. */ +#define HAVE_GETCWD 1 + +/* Define if you have the getpagesize function. */ +#define HAVE_GETPAGESIZE 1 + +/* Define if you have the getrusage function. */ +#define HAVE_GETRUSAGE 1 + +/* Define if you have the gettimeofday function. */ +#define HAVE_GETTIMEOFDAY 1 + +/* Define if you have the index function. */ +#define HAVE_INDEX 1 + +/* Define if you have the insque function. */ +/* #undef HAVE_INSQUE */ + +/* Define if you have the memchr function. */ +#define HAVE_MEMCHR 1 + +/* Define if you have the memcmp function. */ +#define HAVE_MEMCMP 1 + +/* Define if you have the memcpy function. */ +#define HAVE_MEMCPY 1 + +/* Define if you have the memmove function. */ +#define HAVE_MEMMOVE 1 + +/* Define if you have the memset function. */ +#define HAVE_MEMSET 1 + +/* Define if you have the mkstemps function. */ +#define HAVE_MKSTEMPS 1 + +/* Define if you have the on_exit function. */ +/* #undef HAVE_ON_EXIT */ + +/* Define if you have the psignal function. */ +#define HAVE_PSIGNAL 1 + +/* Define if you have the putenv function. */ +#define HAVE_PUTENV 1 + +/* Define if you have the random function. */ +#define HAVE_RANDOM 1 + +/* Define if you have the rename function. */ +#define HAVE_RENAME 1 + +/* Define if you have the rindex function. */ +#define HAVE_RINDEX 1 + +/* Define if you have the sbrk function. */ +#define HAVE_SBRK 1 + +/* Define if you have the setenv function. */ +#define HAVE_SETENV 1 + +/* Define if you have the sigsetmask function. */ +#define HAVE_SIGSETMASK 1 + +/* Define if you have the strcasecmp function. */ +#define HAVE_STRCASECMP 1 + +/* Define if you have the strchr function. */ +#define HAVE_STRCHR 1 + +/* Define if you have the strdup function. */ +#define HAVE_STRDUP 1 + +/* Define if you have the strerror function. */ +#define HAVE_STRERROR 1 + +/* Define if you have the strncasecmp function. */ +#define HAVE_STRNCASECMP 1 + +/* Define if you have the strrchr function. */ +#define HAVE_STRRCHR 1 + +/* Define if you have the strsignal function. */ +#define HAVE_STRSIGNAL 1 + +/* Define if you have the strstr function. */ +#define HAVE_STRSTR 1 + +/* Define if you have the strtod function. */ +#define HAVE_STRTOD 1 + +/* Define if you have the strtol function. */ +#define HAVE_STRTOL 1 + +/* Define if you have the strtoul function. */ +#define HAVE_STRTOUL 1 + +/* Define if you have the sysconf function. */ +#define HAVE_SYSCONF 1 + +/* Define if you have the times function. */ +#define HAVE_TIMES 1 + +/* Define if you have the tmpnam function. */ +#define HAVE_TMPNAM 1 + +/* Define if you have the vasprintf function. */ +#define HAVE_VASPRINTF 1 + +/* Define if you have the vfprintf function. */ +#define HAVE_VFPRINTF 1 + +/* Define if you have the vprintf function. */ +#define HAVE_VPRINTF 1 + +/* Define if you have the vsprintf function. */ +#define HAVE_VSPRINTF 1 + +/* Define if you have the waitpid function. */ +#define HAVE_WAITPID 1 + +/* Define if you have the header file. */ +/* #undef HAVE_ALLOCA_H */ + +/* Define if you have the header file. */ +#define HAVE_FCNTL_H 1 + +/* Define if you have the header file. */ +#define HAVE_LIMITS_H 1 + +/* Define if you have the header file. */ +#define HAVE_STDLIB_H 1 + +/* Define if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define if you have the header file. */ +#define HAVE_STRINGS_H 1 + +/* Define if you have the header file. */ +#define HAVE_SYS_FILE_H 1 + +/* Define if you have the header file. */ +#define HAVE_SYS_MMAN_H 1 + +/* Define if you have the header file. */ +#define HAVE_SYS_PARAM_H 1 + +/* Define if you have the header file. */ +#define HAVE_SYS_RESOURCE_H 1 + +/* Define if you have the header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Define if you have the header file. */ +#define HAVE_SYS_TIME_H 1 + +/* Define if you have the header file. */ +#define HAVE_TIME_H 1 + +/* Define if you have the header file. */ +#define HAVE_UNISTD_H 1 + +/* Define if errno must be declared even when is included. */ +/* #undef NEED_DECLARATION_ERRNO */ + +/* Define if you have the `uintptr_t' type. */ +#define HAVE_UINTPTR_T 1 + +/* Define if you have the sys_errlist variable. */ +#define HAVE_SYS_ERRLIST 1 + +/* Define if you have the sys_nerr variable. */ +#define HAVE_SYS_NERR 1 + +/* Define if you have the sys_siglist variable. */ +#define HAVE_SYS_SIGLIST 1 + +/* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP + systems. This function is required for alloca.c support on those + systems. */ +/* #undef CRAY_STACKSEG_END */ + +/* Define if you know the direction of stack growth for your system; + otherwise it will be automatically deduced at run-time. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown */ +#define STACK_DIRECTION -1 + diff --git a/gnu/usr.bin/binutils214/libopcodes/Makefile b/gnu/usr.bin/binutils214/libopcodes/Makefile new file mode 100644 index 0000000000..047f271155 --- /dev/null +++ b/gnu/usr.bin/binutils214/libopcodes/Makefile @@ -0,0 +1,22 @@ +# $FreeBSD: src/gnu/usr.bin/binutils/libopcodes/Makefile,v 1.6.2.3 2002/09/01 23:39:17 obrien Exp $ +# $DragonFly: src/gnu/usr.bin/binutils214/libopcodes/Attic/Makefile,v 1.1 2004/02/01 08:53:04 dillon Exp $ + +.include "../Makefile.inc0" + +.PATH: ${SRCDIR}/opcodes + +LIB= opcodes +SRCS+= dis-buf.c disassemble.c +CFLAGS+= -I${SRCDIR}/opcodes -I${SRCDIR}/bfd -I${.OBJDIR}/../libbfd +INTERNALLIB= true + +# If set, BINUTILSDISTDIR is the path to a directory containing the full GNU +# binutils release. FreeBSD only distributes the bits that are required to +# build native architectures. BINUTILSDISTDIR is needed to build cross tools. +.if defined(BINUTILSDISTDIR) && exists(${BINUTILSDISTDIR}) +.PATH: ${BINUTILSDISTDIR}/bfd ${BINUTILSDISTDIR}/opcodes +CFLAGS+= -I${BINUTILSDISTDIR}/opcodes -I${BINUTILSDISTDIR}/bfd +CFLAGS+= -I${BINUTILSDISTDIR}/include +.endif + +.include diff --git a/gnu/usr.bin/binutils214/libopcodes/Makefile.i386 b/gnu/usr.bin/binutils214/libopcodes/Makefile.i386 new file mode 100644 index 0000000000..8b941b49b0 --- /dev/null +++ b/gnu/usr.bin/binutils214/libopcodes/Makefile.i386 @@ -0,0 +1,5 @@ +# $FreeBSD: src/gnu/usr.bin/binutils/libopcodes/Makefile.i386,v 1.2.2.2 2002/09/01 23:39:17 obrien Exp $ +# $DragonFly: src/gnu/usr.bin/binutils214/libopcodes/Attic/Makefile.i386,v 1.1 2004/02/01 08:53:04 dillon Exp $ + +SRCS+= i386-dis.c +CFLAGS+= -DARCH_i386 diff --git a/gnu/usr.bin/binutils214/libopcodes/config.h b/gnu/usr.bin/binutils214/libopcodes/config.h new file mode 100644 index 0000000000..7d7401c70b --- /dev/null +++ b/gnu/usr.bin/binutils214/libopcodes/config.h @@ -0,0 +1,138 @@ +/* + * $FreeBSD: src/gnu/usr.bin/binutils/libopcodes/config.h,v 1.1.1.1.6.3 2002/09/01 23:39:17 obrien Exp $ + * $DragonFly: src/gnu/usr.bin/binutils214/libopcodes/Attic/config.h,v 1.1 2004/02/01 08:53:04 dillon Exp $ + */ + +/* config.h. Generated automatically by configure. */ +/* config.in. Generated automatically from configure.in by autoheader. */ + +/* Define if using alloca.c. */ +/* #undef C_ALLOCA */ + +/* Define to empty if the keyword does not work. */ +/* #undef const */ + +/* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems. + This function is required for alloca.c support on those systems. */ +/* #undef CRAY_STACKSEG_END */ + +/* Define if you have alloca, as a function or macro. */ +#define HAVE_ALLOCA 1 + +/* Define if you have and it should be used (not on Ultrix). */ +/* #undef HAVE_ALLOCA_H */ + +/* Define if you have a working `mmap' system call. */ +#define HAVE_MMAP 1 + +/* Define as __inline if that's what the C compiler calls it. */ +/* #undef inline */ + +/* Define to `long' if doesn't define. */ +/* #undef off_t */ + +/* Define to `unsigned' if doesn't define. */ +/* #undef size_t */ + +/* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be + automatically deduced at run-time. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown + */ +/* #undef STACK_DIRECTION */ + +/* Define if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Define if you have the __argz_count function. */ +/* #undef HAVE___ARGZ_COUNT */ + +/* Define if you have the __argz_next function. */ +/* #undef HAVE___ARGZ_NEXT */ + +/* Define if you have the __argz_stringify function. */ +/* #undef HAVE___ARGZ_STRINGIFY */ + +/* Define if you have the dcgettext function. */ +/* #undef HAVE_DCGETTEXT */ + +/* Define if you have the getcwd function. */ +#define HAVE_GETCWD 1 + +/* Define if you have the getpagesize function. */ +#define HAVE_GETPAGESIZE 1 + +/* Define if you have the munmap function. */ +#define HAVE_MUNMAP 1 + +/* Define if you have the putenv function. */ +#define HAVE_PUTENV 1 + +/* Define if you have the setenv function. */ +#define HAVE_SETENV 1 + +/* Define if you have the setlocale function. */ +#define HAVE_SETLOCALE 1 + +/* Define if you have the stpcpy function. */ +/* #undef HAVE_STPCPY */ + +/* Define if you have the strcasecmp function. */ +#define HAVE_STRCASECMP 1 + +/* Define if you have the strchr function. */ +#define HAVE_STRCHR 1 + +/* Define if you have the header file. */ +/* #undef HAVE_ARGZ_H */ + +/* Define if you have the header file. */ +#define HAVE_LIMITS_H 1 + +/* Define if you have the header file. */ +#define HAVE_LOCALE_H 1 + +/* Define if you have the header file. */ +/* #undef HAVE_MALLOC_H */ + +/* Define if you have the header file. */ +#define HAVE_NL_TYPES_H 1 + +/* Define if you have the header file. */ +#define HAVE_STDLIB_H 1 + +/* Define if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define if you have the header file. */ +#define HAVE_STRINGS_H 1 + +/* Define if you have the header file. */ +#define HAVE_SYS_PARAM_H 1 + +/* Define if you have the header file. */ +#define HAVE_UNISTD_H 1 + +/* Define if you have the header file. */ +/* #undef HAVE_VALUES_H */ + +/* Name of package */ +#define PACKAGE "opcodes" + +/* Version number of package */ +/* #define VERSION "2.12" */ + +/* Define if you have the stpcpy function */ +/* #undef HAVE_STPCPY */ + +/* Define if your locale.h file contains LC_MESSAGES. */ +#define HAVE_LC_MESSAGES 1 + +/* Define to 1 if NLS is requested */ +/* #define ENABLE_NLS 1 */ + +/* Define as 1 if you have gettext and don't want to use GNU gettext. */ +/* #undef HAVE_GETTEXT */ + diff --git a/gnu/usr.bin/binutils214/nm/Makefile b/gnu/usr.bin/binutils214/nm/Makefile new file mode 100644 index 0000000000..c454b637c1 --- /dev/null +++ b/gnu/usr.bin/binutils214/nm/Makefile @@ -0,0 +1,19 @@ +# $FreeBSD: src/gnu/usr.bin/binutils/nm/Makefile,v 1.4.2.2 2002/09/01 23:39:17 obrien Exp $ +# $DragonFly: src/gnu/usr.bin/binutils214/nm/Attic/Makefile,v 1.1 2004/02/01 08:53:04 dillon Exp $ + +.include "../Makefile.inc0" + +.PATH: ${SRCDIR}/binutils ${SRCDIR}/binutils/doc + +PROG= nm +SRCS= nm.c +WARNS= 2 +CFLAGS+= -I${.CURDIR}/${RELTOP}/libbinutils +CFLAGS+= -I${SRCDIR}/binutils +CFLAGS+= -I${SRCDIR}/bfd -I${.OBJDIR}/../libbfd +DPADD= ${RELTOP}/libbinutils/libbinutils.a +DPADD+= ${RELTOP}/libbfd/libbfd.a +DPADD+= ${RELTOP}/libiberty/libiberty.a +LDADD= ${DPADD} + +.include diff --git a/gnu/usr.bin/binutils214/objcopy/Makefile b/gnu/usr.bin/binutils214/objcopy/Makefile new file mode 100644 index 0000000000..e60f67d2df --- /dev/null +++ b/gnu/usr.bin/binutils214/objcopy/Makefile @@ -0,0 +1,19 @@ +# $FreeBSD: src/gnu/usr.bin/binutils/objcopy/Makefile,v 1.4.2.2 2002/09/01 23:39:17 obrien Exp $ +# $DragonFly: src/gnu/usr.bin/binutils214/objcopy/Attic/Makefile,v 1.1 2004/02/01 08:53:04 dillon Exp $ + +.include "../Makefile.inc0" + +.PATH: ${SRCDIR}/binutils ${SRCDIR}/binutils/doc + +PROG= objcopy +SRCS= objcopy.c not-strip.c +WARNS= 2 +CFLAGS+= -I${.CURDIR}/${RELTOP}/libbinutils +CFLAGS+= -I${SRCDIR}/binutils +CFLAGS+= -I${SRCDIR}/bfd -I${.OBJDIR}/../libbfd +DPADD= ${RELTOP}/libbinutils/libbinutils.a +DPADD+= ${RELTOP}/libbfd/libbfd.a +DPADD+= ${RELTOP}/libiberty/libiberty.a +LDADD= ${DPADD} + +.include diff --git a/gnu/usr.bin/binutils214/objdump/Makefile b/gnu/usr.bin/binutils214/objdump/Makefile new file mode 100644 index 0000000000..64569a6836 --- /dev/null +++ b/gnu/usr.bin/binutils214/objdump/Makefile @@ -0,0 +1,21 @@ +# $FreeBSD: src/gnu/usr.bin/binutils/objdump/Makefile,v 1.4.2.2 2002/09/01 23:39:17 obrien Exp $ +# $DragonFly: src/gnu/usr.bin/binutils214/objdump/Attic/Makefile,v 1.1 2004/02/01 08:53:05 dillon Exp $ + +.include "../Makefile.inc0" + +.PATH: ${SRCDIR}/binutils ${SRCDIR}/binutils/doc + +PROG= objdump +SRCS= objdump.c prdbg.c +WARNS= 2 +CFLAGS+= -I${.CURDIR}/${RELTOP}/libbinutils +CFLAGS+= -I${SRCDIR}/binutils +CFLAGS+= -I${SRCDIR}/bfd -I${.OBJDIR}/../libbfd +CFLAGS+= -DBFD_VERSION_STRING=\"${VERSION}\" +DPADD= ${RELTOP}/libbinutils/libbinutils.a +DPADD+= ${RELTOP}/libopcodes/libopcodes.a +DPADD+= ${RELTOP}/libbfd/libbfd.a +DPADD+= ${RELTOP}/libiberty/libiberty.a +LDADD= ${DPADD} + +.include diff --git a/gnu/usr.bin/binutils214/ranlib/Makefile b/gnu/usr.bin/binutils214/ranlib/Makefile new file mode 100644 index 0000000000..7c5e0af32c --- /dev/null +++ b/gnu/usr.bin/binutils214/ranlib/Makefile @@ -0,0 +1,20 @@ +# $FreeBSD: src/gnu/usr.bin/binutils/ranlib/Makefile,v 1.4.2.3 2002/09/01 23:39:18 obrien Exp $ +# $DragonFly: src/gnu/usr.bin/binutils214/ranlib/Attic/Makefile,v 1.1 2004/02/01 08:53:05 dillon Exp $ + +.include "../Makefile.inc0" + +.PATH: ${SRCDIR}/binutils ${SRCDIR}/binutils/doc + +PROG= ranlib +SRCS= ar.o is-ranlib.o +CFLAGS+= -I${.CURDIR}/${RELTOP}/libbinutils +CFLAGS+= -I${SRCDIR}/binutils +CFLAGS+= -I${SRCDIR}/bfd -I${.OBJDIR}/../libbfd + +NOSHARED?= yes +DPADD= ${RELTOP}/libbinutils/libbinutils.a +DPADD+= ${RELTOP}/libbfd/libbfd.a +DPADD+= ${RELTOP}/libiberty/libiberty.a +LDADD= ${DPADD} + +.include diff --git a/gnu/usr.bin/binutils214/readelf/Makefile b/gnu/usr.bin/binutils214/readelf/Makefile new file mode 100644 index 0000000000..df7af6ee15 --- /dev/null +++ b/gnu/usr.bin/binutils214/readelf/Makefile @@ -0,0 +1,22 @@ +# $FreeBSD: src/gnu/usr.bin/binutils/readelf/Makefile,v 1.1.2.3 2002/09/01 23:39:18 obrien Exp $ +# $DragonFly: src/gnu/usr.bin/binutils214/readelf/Attic/Makefile,v 1.1 2004/02/01 08:53:05 dillon Exp $ + +.include "../Makefile.inc0" + +.PATH: ${SRCDIR}/binutils ${SRCDIR}/binutils/doc + +# No a.out vs. ELF version so don't install in /usr/libexec/elf +BINDIR=/usr/bin + +PROG= readelf +SRCS= ${PROG}.c +WARNS= 2 +CFLAGS+= -I${.CURDIR}/${RELTOP}/libbinutils -I${SRCDIR}/binutils +CFLAGS+= -I${SRCDIR}/bfd -I${.OBJDIR}/../libbfd + +DPADD= ${RELTOP}/libbinutils/libbinutils.a +DPADD+= ${RELTOP}/libbfd/libbfd.a +DPADD+= ${RELTOP}/libiberty/libiberty.a +LDADD= ${DPADD} + +.include diff --git a/gnu/usr.bin/binutils214/size/Makefile b/gnu/usr.bin/binutils214/size/Makefile new file mode 100644 index 0000000000..d98487caaa --- /dev/null +++ b/gnu/usr.bin/binutils214/size/Makefile @@ -0,0 +1,19 @@ +# $FreeBSD: src/gnu/usr.bin/binutils/size/Makefile,v 1.4.2.2 2002/09/01 23:39:18 obrien Exp $ +# $DragonFly: src/gnu/usr.bin/binutils214/size/Attic/Makefile,v 1.1 2004/02/01 08:53:05 dillon Exp $ + +.include "../Makefile.inc0" + +.PATH: ${SRCDIR}/binutils ${SRCDIR}/binutils/doc + +PROG= size +SRCS= size.c +WARNS= 2 +CFLAGS+= -I${.CURDIR}/${RELTOP}/libbinutils +CFLAGS+= -I${SRCDIR}/binutils +CFLAGS+= -I${SRCDIR}/bfd -I${.OBJDIR}/../libbfd +DPADD= ${RELTOP}/libbinutils/libbinutils.a +DPADD+= ${RELTOP}/libbfd/libbfd.a +DPADD+= ${RELTOP}/libiberty/libiberty.a +LDADD= ${DPADD} + +.include diff --git a/gnu/usr.bin/binutils214/strings/Makefile b/gnu/usr.bin/binutils214/strings/Makefile new file mode 100644 index 0000000000..a102b44f68 --- /dev/null +++ b/gnu/usr.bin/binutils214/strings/Makefile @@ -0,0 +1,19 @@ +# $FreeBSD: src/gnu/usr.bin/binutils/strings/Makefile,v 1.4.2.2 2002/09/01 23:39:18 obrien Exp $ +# $DragonFly: src/gnu/usr.bin/binutils214/strings/Attic/Makefile,v 1.1 2004/02/01 08:53:05 dillon Exp $ + +.include "../Makefile.inc0" + +.PATH: ${SRCDIR}/binutils ${SRCDIR}/binutils/doc + +PROG= strings +SRCS= strings.c +WARNS= 2 +CFLAGS+= -I${.CURDIR}/${RELTOP}/libbinutils +CFLAGS+= -I${SRCDIR}/binutils +CFLAGS+= -I${SRCDIR}/bfd -I${.OBJDIR}/../libbfd +DPADD= ${RELTOP}/libbinutils/libbinutils.a +DPADD+= ${RELTOP}/libbfd/libbfd.a +DPADD+= ${RELTOP}/libiberty/libiberty.a +LDADD= ${DPADD} + +.include diff --git a/gnu/usr.bin/binutils214/strip/Makefile b/gnu/usr.bin/binutils214/strip/Makefile new file mode 100644 index 0000000000..3c353a5683 --- /dev/null +++ b/gnu/usr.bin/binutils214/strip/Makefile @@ -0,0 +1,34 @@ +# $FreeBSD: src/gnu/usr.bin/binutils/strip/Makefile,v 1.6.2.3 2002/09/01 23:39:18 obrien Exp $ +# $DragonFly: src/gnu/usr.bin/binutils214/strip/Attic/Makefile,v 1.1 2004/02/01 08:53:05 dillon Exp $ + +.include "../Makefile.inc0" + +.PATH: ${SRCDIR}/binutils ${SRCDIR}/binutils/doc + +PROG= strip +SRCS= objcopy.c is-strip.c +WARNS= 2 +CFLAGS+= -I${.CURDIR}/${RELTOP}/libbinutils +CFLAGS+= -I${SRCDIR}/binutils +CFLAGS+= -I${SRCDIR}/bfd -I${.OBJDIR}/../libbfd +DPADD= ${RELTOP}/libbinutils/libbinutils.a +DPADD+= ${RELTOP}/libbfd/libbfd.a +DPADD+= ${RELTOP}/libiberty/libiberty.a +LDADD= ${DPADD} +CLEANFILES+= maybe_stripped + +all: maybe_stripped + +maybe_stripped: strip + cp strip maybe_stripped +.if defined(STRIP) +.if ${STRIP:M-s} != "" + -strip maybe_stripped +.endif +.endif + +realinstall: + ${INSTALL} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} \ + maybe_stripped ${DESTDIR}${BINDIR}/strip + +.include -- 2.41.0