summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormiod <miod@openbsd.org>2009-08-09 23:04:47 +0000
committermiod <miod@openbsd.org>2009-08-09 23:04:47 +0000
commit8aa1a2c37f2916a702d74936d443675c13efc34e (patch)
treec3207bf9683e1b1fd5f53fc8a2f6c40f493bf0e4
parentScale both receive and send buffer on the raw socket. The default 8192 (diff)
downloadwireguard-openbsd-8aa1a2c37f2916a702d74936d443675c13efc34e.tar.xz
wireguard-openbsd-8aa1a2c37f2916a702d74936d443675c13efc34e.zip
Introduce option DDB_STRUCT. Kernels compiled with this option (except on
a few arches where toolchain limitations apply) will embed some symbolic information about the various structs used within the kernel, and have new ddb commands allowing struct display and some useful information gathering. Kernel rodata increase varies accross platforms from ~150KB to ~300KB. This option is not enabled by default.
-rw-r--r--share/man/man4/ddb.431
-rw-r--r--share/man/man4/options.411
-rw-r--r--sys/arch/alpha/conf/Makefile.alpha17
-rw-r--r--sys/arch/amd64/conf/Makefile.amd6417
-rw-r--r--sys/arch/armish/conf/Makefile.armish17
-rw-r--r--sys/arch/aviion/conf/Makefile.aviion17
-rw-r--r--sys/arch/beagle/conf/Makefile.beagle17
-rw-r--r--sys/arch/gumstix/conf/Makefile.gumstix17
-rw-r--r--sys/arch/hp300/conf/Makefile.hp30017
-rw-r--r--sys/arch/hppa/conf/Makefile.hppa17
-rw-r--r--sys/arch/hppa64/conf/Makefile.hppa6417
-rw-r--r--sys/arch/i386/conf/Makefile.i38617
-rw-r--r--sys/arch/landisk/conf/Makefile.landisk17
-rw-r--r--sys/arch/luna88k/conf/Makefile.luna88k17
-rw-r--r--sys/arch/mac68k/conf/Makefile.mac68k16
-rw-r--r--sys/arch/macppc/conf/Makefile.macppc17
-rw-r--r--sys/arch/moko/conf/Makefile.moko17
-rw-r--r--sys/arch/mvme68k/conf/Makefile.mvme68k17
-rw-r--r--sys/arch/mvme88k/conf/Makefile.mvme88k17
-rw-r--r--sys/arch/mvmeppc/conf/Makefile.mvmeppc17
-rw-r--r--sys/arch/sgi/conf/Makefile.sgi17
-rw-r--r--sys/arch/socppc/conf/Makefile.socppc17
-rw-r--r--sys/arch/solbourne/conf/Makefile.solbourne17
-rw-r--r--sys/arch/sparc/conf/Makefile.sparc17
-rw-r--r--sys/arch/sparc64/conf/Makefile.sparc6415
-rw-r--r--sys/arch/vax/conf/Makefile.vax17
-rw-r--r--sys/arch/zaurus/conf/Makefile.zaurus17
-rw-r--r--sys/conf/files5
-rw-r--r--sys/ddb/db_command.c14
-rw-r--r--sys/ddb/db_command.h4
-rw-r--r--sys/ddb/db_struct.c271
-rw-r--r--sys/ddb/db_structinfo.c122
-rw-r--r--sys/ddb/parse_structinfo.awk318
33 files changed, 1111 insertions, 87 deletions
diff --git a/share/man/man4/ddb.4 b/share/man/man4/ddb.4
index 9fbc577ca4b..63184655eec 100644
--- a/share/man/man4/ddb.4
+++ b/share/man/man4/ddb.4
@@ -1,4 +1,4 @@
-.\" $OpenBSD: ddb.4,v 1.58 2009/02/22 15:10:41 jsing Exp $
+.\" $OpenBSD: ddb.4,v 1.59 2009/08/09 23:04:47 miod Exp $
.\" $NetBSD: ddb.4,v 1.5 1994/11/30 16:22:09 jtc Exp $
.\"
.\" Mach Operating System
@@ -25,7 +25,7 @@
.\" any improvements or extensions that they make and grant Carnegie Mellon
.\" the rights to redistribute these changes.
.\"
-.Dd $Mdocdate: February 22 2009 $
+.Dd $Mdocdate: August 9 2009 $
.Dt DDB 4
.Os
.Sh NAME
@@ -96,6 +96,7 @@ the current location is called
The
.Ic examine ,
.Ic search ,
+.Ic show struct,
and
.Ic write
commands update
@@ -679,6 +680,17 @@ If the
modifier is specified the complete object is printed.
.\" --------------------
.It Xo
+.Ic show offset
+.Ar offset
+.Xc
+Prints a list of the known kernel structure fields which occur at the given
+.Ar offset
+from the beginning of the struct, as well as their size.
+The
+.Cm option DDB_STRUCT
+is required for this command to be available.
+.\" --------------------
+.It Xo
.Ic show page
.Op Cm /f
.Ar addr
@@ -733,6 +745,21 @@ Note: The
modifier is not supported on every machine, in which case
incorrect information may be displayed.
.\" --------------------
+.It Xo
+.Ic show struct
+.Ar name
+.Op addr
+.Xc
+Prints the content of the memory at
+.Ar addr
+as a struct
+.Ar name .
+Nested structures and bit fields are not printed.
+Character arrays are printed as bytes.
+The
+.Cm option DDB_STRUCT
+is required for this command to be available.
+.\" --------------------
.It Ic show uvmexp
Displays a selection of uvm counters and statistics.
.\" --------------------
diff --git a/share/man/man4/options.4 b/share/man/man4/options.4
index 5009903de76..3937873330b 100644
--- a/share/man/man4/options.4
+++ b/share/man/man4/options.4
@@ -1,4 +1,4 @@
-.\" $OpenBSD: options.4,v 1.192 2009/06/04 13:30:07 jmc Exp $
+.\" $OpenBSD: options.4,v 1.193 2009/08/09 23:04:47 miod Exp $
.\" $NetBSD: options.4,v 1.21 1997/06/25 03:13:00 thorpej Exp $
.\"
.\" Copyright (c) 1998 Theo de Raadt
@@ -34,7 +34,7 @@
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\"
.\"
-.Dd $Mdocdate: June 4 2009 $
+.Dd $Mdocdate: August 9 2009 $
.Dt OPTIONS 4
.Os
.Sh NAME
@@ -216,11 +216,14 @@ Compiles in a kernel debugger for diagnosing kernel problems.
See
.Xr ddb 4
for details.
-.Em Note:
-not available on all architectures.
.It Cd option DDB_SAFE_CONSOLE
Allows a break into the kernel debugger during boot.
Useful when debugging problems that can cause init(8) to fail.
+.It Cd option DDB_STRUCT
+Compiles in symbolic information about the various data structures used by the
+kernel, for use within the kernel debugger.
+This option is currently not supported on alpha, m68k, m88k and vax based
+platforms.
.It Cd option DEBUG
Turns on miscellaneous kernel debugging.
Since options are turned into preprocessor defines (see above),
diff --git a/sys/arch/alpha/conf/Makefile.alpha b/sys/arch/alpha/conf/Makefile.alpha
index 9859cc78cf7..87fcceee8be 100644
--- a/sys/arch/alpha/conf/Makefile.alpha
+++ b/sys/arch/alpha/conf/Makefile.alpha
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile.alpha,v 1.44 2009/01/11 21:02:03 pirofti Exp $
+# $OpenBSD: Makefile.alpha,v 1.45 2009/08/09 23:04:49 miod Exp $
# $NetBSD: Makefile.alpha,v 1.27 1996/12/01 06:12:25 jonathan Exp $
# Makefile for OpenBSD
@@ -46,6 +46,12 @@ AFLAGS= -traditional -D_LOCORE
LINKFLAGS= -N -Ttext fffffc0000230000 -e __start -G 4
STRIPFLAGS= -g -X -x
+.if ${IDENT:M-DDDB_STRUCT}
+DB_STRUCTINFO= db_structinfo.h
+.else
+DB_STRUCTINFO=
+.endif
+
HOSTED_CC= ${CC}
HOSTED_CPPFLAGS=${CPPFLAGS:S/^-nostdinc$//}
HOSTED_CFLAGS= ${CFLAGS}
@@ -115,7 +121,7 @@ newvers: ${SYSTEM_DEP} ${SYSTEM_SWAP_DEP}
clean::
rm -f eddep *bsd bsd.gdb tags *.[io] [a-z]*.s \
- [Ee]rrs linterrs makelinks assym.h
+ [Ee]rrs linterrs makelinks assym.h ${DB_STRUCTINFO}
lint:
@lint -hbxncez -DGENERIC -Dvolatile= ${CPPFLAGS} -UKGDB \
@@ -135,7 +141,7 @@ links:
SRCS= ${ALPHA}/alpha/locore.s param.c ioconf.c ${CFILES} ${SFILES}
depend:: .depend
-.depend: ${SRCS} assym.h param.c ${ALPHA}/alpha/cpuconf.c
+.depend: ${SRCS} assym.h param.c ${ALPHA}/alpha/cpuconf.c ${DB_STRUCTINFO}
${MKDEP} ${AFLAGS} ${CPPFLAGS} ${ALPHA}/alpha/locore.s
${MKDEP} -a ${CFLAGS} ${CPPFLAGS} ${ALPHA}/alpha/cpuconf.c \
param.c ioconf.c ${CFILES}
@@ -146,6 +152,11 @@ depend:: .depend
< assym.dep >> .depend
@rm -f assym.dep
+db_structinfo.h: $S/ddb/db_structinfo.c $S/ddb/parse_structinfo.awk
+ ${CC} ${CFLAGS} ${CPPFLAGS} -gstabs -c $S/ddb/db_structinfo.c
+ objdump -g db_structinfo.o | awk -f $S/ddb/parse_structinfo.awk > $@
+ rm -f db_structinfo.o
+
# depend on root or device configuration
autoconf.o conf.o: Makefile
diff --git a/sys/arch/amd64/conf/Makefile.amd64 b/sys/arch/amd64/conf/Makefile.amd64
index 07d6902b428..08d56696af2 100644
--- a/sys/arch/amd64/conf/Makefile.amd64
+++ b/sys/arch/amd64/conf/Makefile.amd64
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile.amd64,v 1.17 2009/07/10 13:51:47 jsg Exp $
+# $OpenBSD: Makefile.amd64,v 1.18 2009/08/09 23:04:49 miod Exp $
# Makefile for OpenBSD
#
@@ -52,6 +52,12 @@ AFLAGS= -x assembler-with-cpp -D_LOCORE
LINKFLAGS= -Ttext 0xffffffff801001e0 -e start -X
STRIPFLAGS= -g -x
+.if ${IDENT:M-DDDB_STRUCT}
+DB_STRUCTINFO= db_structinfo.h
+.else
+DB_STRUCTINFO=
+.endif
+
HOSTCC= ${CC}
HOSTED_CPPFLAGS=${CPPFLAGS:S/^-nostdinc$//}
HOSTED_CFLAGS= ${CFLAGS}
@@ -129,7 +135,7 @@ newvers: ${SYSTEM_DEP} ${SYSTEM_SWAP_DEP}
clean::
rm -f eddep *bsd bsd.gdb tags *.[io] [a-z]*.s \
- [Ee]rrs linterrs makelinks assym.h
+ [Ee]rrs linterrs makelinks assym.h ${DB_STRUCTINFO}
lint:
@lint -hbxncez -Dvolatile= ${CPPFLAGS} ${PARAM} -UKGDB \
@@ -151,7 +157,7 @@ AFILES= ${AMD64}/amd64/locore.S ${AMD64}/amd64/vector.S ${AMD64}/amd64/copy.S \
${AMD64}/amd64/spl.S
SRCS= param.c ioconf.c ${AFILES} ${CFILES} ${SFILES}
depend:: .depend
-.depend: ${SRCS} assym.h param.c ${APMINC}
+.depend: ${SRCS} assym.h param.c ${APMINC} ${DB_STRUCTINFO}
${MKDEP} ${AFLAGS} ${CPPFLAGS} ${AFILES}
${MKDEP} -a ${CFLAGS} ${CPPFLAGS} param.c ioconf.c ${CFILES}
${MKDEP} -a ${AFLAGS} ${CPPFLAGS} ${SFILES}
@@ -161,6 +167,11 @@ depend:: .depend
< assym.dep >> .depend
@rm -f assym.dep
+db_structinfo.h: $S/ddb/db_structinfo.c $S/ddb/parse_structinfo.awk
+ ${CC} ${CFLAGS} ${CPPFLAGS} -gstabs -c $S/ddb/db_structinfo.c
+ objdump -g db_structinfo.o | awk -f $S/ddb/parse_structinfo.awk > $@
+ rm -f db_structinfo.o
+
# depend on root or device configuration
autoconf.o conf.o: Makefile
diff --git a/sys/arch/armish/conf/Makefile.armish b/sys/arch/armish/conf/Makefile.armish
index b9782cffd15..dd6eedb0f6c 100644
--- a/sys/arch/armish/conf/Makefile.armish
+++ b/sys/arch/armish/conf/Makefile.armish
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile.armish,v 1.10 2009/01/11 21:02:03 pirofti Exp $
+# $OpenBSD: Makefile.armish,v 1.11 2009/08/09 23:04:49 miod Exp $
# $NetBSD: Makefile.i386,v 1.67 1996/05/11 16:12:11 mycroft Exp $
# Makefile for OpenBSD
@@ -57,6 +57,12 @@ LINKFLAGS= -T ldscript
LINKFLAGS+= --warn-common
STRIPFLAGS= -g -X -x
+.if ${IDENT:M-DDDB_STRUCT}
+DB_STRUCTINFO= db_structinfo.h
+.else
+DB_STRUCTINFO=
+.endif
+
HOSTCC= ${CC}
HOSTED_CPPFLAGS=${CPPFLAGS:S/^-nostdinc$//}
HOSTED_CFLAGS= ${CFLAGS}
@@ -143,7 +149,7 @@ newvers: ${SYSTEM_DEP} ${SYSTEM_SWAP_DEP}
clean::
rm -f eddep *bsd bsd.gdb tags *.[io] [a-z]*.s \
- [Ee]rrs linterrs makelinks assym.h
+ [Ee]rrs linterrs makelinks assym.h ${DB_STRUCTINFO}
lint:
@lint -hbxncez -Dvolatile= ${CPPFLAGS} ${PARAM} -UKGDB \
@@ -164,7 +170,7 @@ links:
SRCS= ${ARM}/arm/locore.S \
param.c ioconf.c ${CFILES} ${SFILES}
depend:: .depend
-.depend: ${SRCS} assym.h param.c ${APMINC}
+.depend: ${SRCS} assym.h param.c ${APMINC} ${DB_STRUCTINFO}
${MKDEP} ${AFLAGS} ${CPPFLAGS} ${ARM}/arm/locore.S
${MKDEP} -a ${CFLAGS} ${CPPFLAGS} param.c ioconf.c ${CFILES}
.if ${SFILES} != ""
@@ -177,6 +183,11 @@ depend:: .depend
< assym.dep >> .depend
@rm -f assym.dep
+db_structinfo.h: $S/ddb/db_structinfo.c $S/ddb/parse_structinfo.awk
+ ${CC} ${CFLAGS} ${CPPFLAGS} -gstabs -c $S/ddb/db_structinfo.c
+ objdump -g db_structinfo.o | awk -f $S/ddb/parse_structinfo.awk > $@
+ rm -f db_structinfo.o
+
# depend on root or device configuration
autoconf.o conf.o: Makefile
diff --git a/sys/arch/aviion/conf/Makefile.aviion b/sys/arch/aviion/conf/Makefile.aviion
index 0b5d1280aea..6b41a389097 100644
--- a/sys/arch/aviion/conf/Makefile.aviion
+++ b/sys/arch/aviion/conf/Makefile.aviion
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile.aviion,v 1.8 2009/01/11 21:02:03 pirofti Exp $
+# $OpenBSD: Makefile.aviion,v 1.9 2009/08/09 23:04:49 miod Exp $
#
# Makefile for OpenBSD
#
@@ -52,6 +52,12 @@ AFLAGS= -x assembler-with-cpp -traditional-cpp -D_LOCORE ${CMACHFLAGS}
LINKFLAGS= -Ttext 0x1000 -e start
STRIPFLAGS= -d
+.if ${IDENT:M-DDDB_STRUCT}
+DB_STRUCTINFO= db_structinfo.h
+.else
+DB_STRUCTINFO=
+.endif
+
HOSTCC?= ${CC}
HOSTED_CPPFLAGS?=${CPPFLAGS:S/^-nostdinc$//}
HOSTED_CFLAGS?= ${CFLAGS}
@@ -128,7 +134,7 @@ newvers: ${SYSTEM_DEP} ${SYSTEM_SWAP_DEP}
clean::
rm -f eddep *bsd bsd.gdb tags *.[io] [a-z]*.s \
- [Ee]rrs linterrs makelinks assym.h
+ [Ee]rrs linterrs makelinks assym.h ${DB_STRUCTINFO}
lint:
@lint -hbxncez -DGENERIC -Dvolatile= ${CPPFLAGS} ${PARAM} -UKGDB \
@@ -150,7 +156,7 @@ links:
SRCS= param.c ioconf.c ${CFILES} ${SFILES}
depend:: .depend
-.depend: ${SRCS} assym.h param.c
+.depend: ${SRCS} assym.h param.c ${DB_STRUCTINFO}
${MKDEP} -a ${CFLAGS} ${CPPFLAGS} param.c ioconf.c ${CFILES}
.if !empty(SFILES)
${MKDEP} -a ${AFLAGS} ${CPPFLAGS} ${SFILES}
@@ -161,6 +167,11 @@ depend:: .depend
< assym.dep >> .depend
@rm -f assym.dep
+db_structinfo.h: $S/ddb/db_structinfo.c $S/ddb/parse_structinfo.awk
+ ${CC} ${CFLAGS} ${CPPFLAGS} -gstabs -c $S/ddb/db_structinfo.c
+ objdump -g db_structinfo.o | awk -f $S/ddb/parse_structinfo.awk > $@
+ rm -f db_structinfo.o
+
# depend on root or device configuration
autoconf.o conf.o: Makefile
diff --git a/sys/arch/beagle/conf/Makefile.beagle b/sys/arch/beagle/conf/Makefile.beagle
index 7c1093df1ff..d45eef3478d 100644
--- a/sys/arch/beagle/conf/Makefile.beagle
+++ b/sys/arch/beagle/conf/Makefile.beagle
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile.beagle,v 1.2 2009/05/24 21:02:48 drahn Exp $
+# $OpenBSD: Makefile.beagle,v 1.3 2009/08/09 23:04:49 miod Exp $
# Makefile for OpenBSD
#
@@ -55,6 +55,12 @@ LINKFLAGS= -T ldscript
LINKFLAGS+= --warn-common
STRIPFLAGS= -g -X -x
+.if ${IDENT:M-DDDB_STRUCT}
+DB_STRUCTINFO= db_structinfo.h
+.else
+DB_STRUCTINFO=
+.endif
+
HOSTCC= ${CC}
HOSTED_CPPFLAGS=${CPPFLAGS:S/^-nostdinc$//}
HOSTED_CFLAGS= ${CFLAGS}
@@ -139,7 +145,7 @@ newvers: ${SYSTEM_DEP} ${SYSTEM_SWAP_DEP}
clean::
rm -f eddep *bsd bsd.gdb tags *.[io] [a-z]*.s \
- [Ee]rrs linterrs makelinks assym.h
+ [Ee]rrs linterrs makelinks assym.h ${DB_STRUCTINFO}
lint:
@lint -hbxncez -Dvolatile= ${CPPFLAGS} ${PARAM} -UKGDB \
@@ -160,7 +166,7 @@ links:
SRCS= ${ARM}/arm/locore.S \
param.c ioconf.c ${CFILES} ${SFILES}
depend:: .depend
-.depend: ${SRCS} assym.h param.c ${APMINC}
+.depend: ${SRCS} assym.h param.c ${APMINC} ${DB_STRUCTINFO}
${MKDEP} ${AFLAGS} ${CPPFLAGS} ${ARM}/arm/locore.S
${MKDEP} -a ${CFLAGS} ${CPPFLAGS} param.c ioconf.c ${CFILES}
.if ${SFILES} != ""
@@ -172,6 +178,11 @@ depend:: .depend
@sed -e 's/.*\.o:.* /assym.h: /' < assym.dep >> .depend
@rm -f assym.dep
+db_structinfo.h: $S/ddb/db_structinfo.c $S/ddb/parse_structinfo.awk
+ ${CC} ${CFLAGS} ${CPPFLAGS} -gstabs -c $S/ddb/db_structinfo.c
+ objdump -g db_structinfo.o | awk -f $S/ddb/parse_structinfo.awk > $@
+ rm -f db_structinfo.o
+
# depend on root or device configuration
autoconf.o conf.o: Makefile
diff --git a/sys/arch/gumstix/conf/Makefile.gumstix b/sys/arch/gumstix/conf/Makefile.gumstix
index 9255edc4769..0aea374f3f6 100644
--- a/sys/arch/gumstix/conf/Makefile.gumstix
+++ b/sys/arch/gumstix/conf/Makefile.gumstix
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile.gumstix,v 1.2 2009/01/11 21:02:03 pirofti Exp $
+# $OpenBSD: Makefile.gumstix,v 1.3 2009/08/09 23:04:49 miod Exp $
# $NetBSD: Makefile.i386,v 1.67 1996/05/11 16:12:11 mycroft Exp $
# Makefile for OpenBSD
@@ -57,6 +57,12 @@ LINKFLAGS= -T ldscript
LINKFLAGS+= --warn-common
STRIPFLAGS= -g -X -x
+.if ${IDENT:M-DDDB_STRUCT}
+DB_STRUCTINFO= db_structinfo.h
+.else
+DB_STRUCTINFO=
+.endif
+
HOSTCC= ${CC}
HOSTED_CPPFLAGS=${CPPFLAGS:S/^-nostdinc$//}
HOSTED_CFLAGS= ${CFLAGS}
@@ -141,7 +147,7 @@ newvers: ${SYSTEM_DEP} ${SYSTEM_SWAP_DEP}
clean::
rm -f eddep *bsd bsd.gdb tags *.[io] [a-z]*.s \
- [Ee]rrs linterrs makelinks assym.h
+ [Ee]rrs linterrs makelinks assym.h ${DB_STRUCTINFO}
lint:
@lint -hbxncez -Dvolatile= ${CPPFLAGS} ${PARAM} -UKGDB \
@@ -162,7 +168,7 @@ links:
SRCS= ${ARM}/arm/locore.S \
param.c ioconf.c ${CFILES} ${SFILES}
depend:: .depend
-.depend: ${SRCS} assym.h param.c ${APMINC}
+.depend: ${SRCS} assym.h param.c ${APMINC} ${DB_STRUCTINFO}
${MKDEP} ${AFLAGS} ${CPPFLAGS} ${ARM}/arm/locore.S
${MKDEP} -a ${CFLAGS} ${CPPFLAGS} param.c ioconf.c ${CFILES}
.if ${SFILES} != ""
@@ -175,6 +181,11 @@ depend:: .depend
< assym.dep >> .depend
@rm -f assym.dep
+db_structinfo.h: $S/ddb/db_structinfo.c $S/ddb/parse_structinfo.awk
+ ${CC} ${CFLAGS} ${CPPFLAGS} -gstabs -c $S/ddb/db_structinfo.c
+ objdump -g db_structinfo.o | awk -f $S/ddb/parse_structinfo.awk > $@
+ rm -f db_structinfo.o
+
# depend on root or device configuration
autoconf.o conf.o: Makefile
diff --git a/sys/arch/hp300/conf/Makefile.hp300 b/sys/arch/hp300/conf/Makefile.hp300
index 4f7ed93ade4..c4e560eae09 100644
--- a/sys/arch/hp300/conf/Makefile.hp300
+++ b/sys/arch/hp300/conf/Makefile.hp300
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile.hp300,v 1.45 2009/01/11 21:02:03 pirofti Exp $
+# $OpenBSD: Makefile.hp300,v 1.46 2009/08/09 23:04:49 miod Exp $
# $NetBSD: Makefile.hp300,v 1.54 1997/04/01 23:16:41 scottr Exp $
# Makefile for OpenBSD
@@ -51,6 +51,12 @@ AFLAGS= -x assembler-with-cpp -traditional-cpp -D_LOCORE
LINKFLAGS= -n -Ttext 0 -e start
STRIPFLAGS= -d
+.if ${IDENT:M-DDDB_STRUCT}
+DB_STRUCTINFO= db_structinfo.h
+.else
+DB_STRUCTINFO=
+.endif
+
HOSTCC?= ${CC}
HOSTED_CPPFLAGS=${CPPFLAGS:S/^-nostdinc$//}
HOSTED_CFLAGS= ${CFLAGS}
@@ -161,7 +167,7 @@ newvers: ${SYSTEM_DEP} ${SYSTEM_SWAP_DEP}
clean::
rm -f eddep *bsd bsd.gdb tags *.[io] [a-z]*.s \
- [Ee]rrs linterrs makelinks assym.h
+ [Ee]rrs linterrs makelinks assym.h ${DB_STRUCTINFO}
lint:
@lint -hbxncez -DGENERIC -Dvolatile= ${CPPFLAGS} -UKGDB \
@@ -182,7 +188,7 @@ links:
SRCS= ${HP300}/hp300/locore.s \
param.c ioconf.c ${CFILES} ${SFILES}
depend:: .depend
-.depend: ${SRCS} assym.h param.c
+.depend: ${SRCS} assym.h param.c ${DB_STRUCTINFO}
${MKDEP} ${AFLAGS} ${CPPFLAGS} ${HP300}/hp300/locore.s
${MKDEP} -a ${CFLAGS} ${CPPFLAGS} param.c ioconf.c ${CFILES}
-if test -n "${SFILES}"; then \
@@ -194,6 +200,11 @@ depend:: .depend
< assym.dep >> .depend
@rm -f assym.dep
+db_structinfo.h: $S/ddb/db_structinfo.c $S/ddb/parse_structinfo.awk
+ ${CC} ${CFLAGS} ${CPPFLAGS} -gstabs -c $S/ddb/db_structinfo.c
+ objdump -g db_structinfo.o | awk -f $S/ddb/parse_structinfo.awk > $@
+ rm -f db_structinfo.o
+
# depend on root or device configuration
autoconf.o conf.o: Makefile
diff --git a/sys/arch/hppa/conf/Makefile.hppa b/sys/arch/hppa/conf/Makefile.hppa
index c6b468c9f32..4c66591f8fe 100644
--- a/sys/arch/hppa/conf/Makefile.hppa
+++ b/sys/arch/hppa/conf/Makefile.hppa
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile.hppa,v 1.35 2009/08/09 21:33:36 miod Exp $
+# $OpenBSD: Makefile.hppa,v 1.36 2009/08/09 23:04:49 miod Exp $
# Makefile for OpenBSD
#
@@ -69,6 +69,12 @@ LIBSPMATH= ${SPMATH_PROF}
.endif
.endif
+.if ${IDENT:M-DDDB_STRUCT}
+DB_STRUCTINFO= db_structinfo.h
+.else
+DB_STRUCTINFO=
+.endif
+
HOSTCC?= ${CC}
HOSTED_CPPFLAGS=${CPPFLAGS:S/^-nostdinc$//}
HOSTED_CFLAGS= ${CFLAGS}
@@ -140,7 +146,7 @@ newvers: ${SYSTEM_DEP} ${SYSTEM_SWAP_DEP}
clean::
rm -f eddep *bsd bsd.gdb tags *.[io] [a-z]*.s \
- [Ee]rrs linterrs makelinks assym.h
+ [Ee]rrs linterrs makelinks assym.h ${DB_STRUCTINFO}
lint:
@lint -hbxncez -DGENERIC -Dvolatile= ${CPPFLAGS} -UKGDB \
@@ -160,7 +166,7 @@ links:
SRCS= ${HPPA}/hppa/locore.S \
param.c ioconf.c ${CFILES} ${SFILES}
-.depend: ${SRCS} assym.h param.c
+.depend: ${SRCS} assym.h param.c ${DB_STRUCTINFO}
${MKDEP} ${AFLAGS} ${CPPFLAGS} ${HPPA}/hppa/locore.S
${MKDEP} -a ${CFLAGS} ${CPPFLAGS} param.c ioconf.c ${CFILES}
-if test -n "${SFILES}"; then \
@@ -172,6 +178,11 @@ SRCS= ${HPPA}/hppa/locore.S \
< assym.dep >> .depend
@rm -f assym.dep
+db_structinfo.h: $S/ddb/db_structinfo.c $S/ddb/parse_structinfo.awk
+ ${CC} ${CFLAGS} ${CPPFLAGS} -gstabs -c $S/ddb/db_structinfo.c
+ objdump -g db_structinfo.o | awk -f $S/ddb/parse_structinfo.awk > $@
+ rm -f db_structinfo.o
+
# depend on root or device configuration
autoconf.o conf.o: Makefile
diff --git a/sys/arch/hppa64/conf/Makefile.hppa64 b/sys/arch/hppa64/conf/Makefile.hppa64
index 8b764075ebc..29894d638e5 100644
--- a/sys/arch/hppa64/conf/Makefile.hppa64
+++ b/sys/arch/hppa64/conf/Makefile.hppa64
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile.hppa64,v 1.9 2009/08/09 21:33:38 miod Exp $
+# $OpenBSD: Makefile.hppa64,v 1.10 2009/08/09 23:04:49 miod Exp $
# Makefile for OpenBSD
#
@@ -51,6 +51,12 @@ STRIPFLAGS= -g -x
CFLAGS+= -fno-omit-frame-pointer
.endif
+.if ${IDENT:M-DDDB_STRUCT}
+DB_STRUCTINFO= db_structinfo.h
+.else
+DB_STRUCTINFO=
+.endif
+
HOSTCC?= ${CC}
HOSTED_CPPFLAGS=${CPPFLAGS:S/^-nostdinc$//}
HOSTED_CFLAGS= ${CFLAGS}
@@ -124,7 +130,7 @@ newvers: ${SYSTEM_DEP} ${SYSTEM_SWAP_DEP}
clean::
rm -f eddep *bsd bsd.gdb tags *.[io] [a-z]*.s \
- [Ee]rrs linterrs makelinks assym.h
+ [Ee]rrs linterrs makelinks assym.h ${DB_STRUCTINFO}
lint:
@lint -hbxncez -DGENERIC -Dvolatile= ${CPPFLAGS} -UKGDB \
@@ -144,7 +150,7 @@ links:
SRCS= ${HPPA}/hppa64/locore.S \
param.c ioconf.c ${CFILES} ${SFILES}
-.depend: ${SRCS} assym.h param.c
+.depend: ${SRCS} assym.h param.c ${DB_STRUCTINFO}
${MKDEP} ${AFLAGS} ${CPPFLAGS} ${HPPA}/hppa64/locore.S
${MKDEP} -a ${CFLAGS} ${CPPFLAGS} param.c ioconf.c ${CFILES}
-if test -n "${SFILES}"; then \
@@ -156,6 +162,11 @@ SRCS= ${HPPA}/hppa64/locore.S \
< assym.dep >> .depend
@rm -f assym.dep
+db_structinfo.h: $S/ddb/db_structinfo.c $S/ddb/parse_structinfo.awk
+ ${CC} ${CFLAGS} ${CPPFLAGS} -gstabs -c $S/ddb/db_structinfo.c
+ objdump -g db_structinfo.o | awk -f $S/ddb/parse_structinfo.awk > $@
+ rm -f db_structinfo.o
+
# depend on root or device configuration
autoconf.o conf.o: Makefile
diff --git a/sys/arch/i386/conf/Makefile.i386 b/sys/arch/i386/conf/Makefile.i386
index abfc61545cc..25a5609b156 100644
--- a/sys/arch/i386/conf/Makefile.i386
+++ b/sys/arch/i386/conf/Makefile.i386
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile.i386,v 1.52 2009/07/10 13:51:47 jsg Exp $
+# $OpenBSD: Makefile.i386,v 1.53 2009/08/09 23:04:49 miod Exp $
# Makefile for OpenBSD
#
@@ -56,6 +56,12 @@ AFLAGS+=-m32
LINKFLAGS+=-melf_i386_obsd
.endif
+.if ${IDENT:M-DDDB_STRUCT}
+DB_STRUCTINFO= db_structinfo.h
+.else
+DB_STRUCTINFO=
+.endif
+
HOSTCC= ${CC}
HOSTED_CPPFLAGS=${CPPFLAGS:S/^-nostdinc$//}
HOSTED_CFLAGS= ${CFLAGS}
@@ -133,7 +139,7 @@ newvers: ${SYSTEM_DEP} ${SYSTEM_SWAP_DEP}
clean::
rm -f eddep *bsd bsd.gdb tags *.[io] [a-z]*.s \
- [Ee]rrs linterrs makelinks assym.h
+ [Ee]rrs linterrs makelinks assym.h ${DB_STRUCTINFO}
lint:
@lint -hbxncez -Dvolatile= ${CPPFLAGS} ${PARAM} -UKGDB \
@@ -154,7 +160,7 @@ links:
SRCS= ${I386}/i386/locore.s \
param.c ioconf.c ${CFILES} ${SFILES}
depend:: .depend
-.depend: ${SRCS} assym.h param.c ${APMINC}
+.depend: ${SRCS} assym.h param.c ${APMINC} ${DB_STRUCTINFO}
${MKDEP} ${AFLAGS} ${CPPFLAGS} ${I386}/i386/locore.s
${MKDEP} -a ${CFLAGS} ${CPPFLAGS} param.c ioconf.c ${CFILES}
${MKDEP} -a ${AFLAGS} ${CPPFLAGS} ${SFILES}
@@ -164,6 +170,11 @@ depend:: .depend
< assym.dep >> .depend
@rm -f assym.dep
+db_structinfo.h: $S/ddb/db_structinfo.c $S/ddb/parse_structinfo.awk
+ ${CC} ${CFLAGS} ${CPPFLAGS} -gstabs -c $S/ddb/db_structinfo.c
+ objdump -g db_structinfo.o | awk -f $S/ddb/parse_structinfo.awk > $@
+ rm -f db_structinfo.o
+
# depend on root or device configuration
autoconf.o conf.o: Makefile
diff --git a/sys/arch/landisk/conf/Makefile.landisk b/sys/arch/landisk/conf/Makefile.landisk
index 80c9014d7fc..86b804ef8ec 100644
--- a/sys/arch/landisk/conf/Makefile.landisk
+++ b/sys/arch/landisk/conf/Makefile.landisk
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile.landisk,v 1.10 2009/08/09 21:33:38 miod Exp $
+# $OpenBSD: Makefile.landisk,v 1.11 2009/08/09 23:04:49 miod Exp $
#
# Makefile for OpenBSD/landisk
#
@@ -52,6 +52,12 @@ AFLAGS= -x assembler-with-cpp -traditional-cpp -D_LOCORE -Wa,-little
LINKFLAGS= -N -Ttext 0x8c002000 -e start --warn-common
STRIPFLAGS= -g -X -x
+.if ${IDENT:M-DDDB_STRUCT}
+DB_STRUCTINFO= db_structinfo.h
+.else
+DB_STRUCTINFO=
+.endif
+
HOSTCC?= ${CC}
HOSTED_CPPFLAGS=${CPPFLAGS:S/^-nostdinc$//}
HOSTED_CFLAGS= ${CFLAGS}
@@ -129,7 +135,7 @@ newvers: ${SYSTEM_DEP} ${SYSTEM_SWAP_DEP}
clean::
rm -f eddep *bsd bsd.gdb tags *.[io] [a-z]*.s \
- [Ee]rrs linterrs makelinks assym.h
+ [Ee]rrs linterrs makelinks assym.h ${DB_STRUCTINFO}
lint:
@lint -hbxncez -DGENERIC -Dvolatile= ${CPPFLAGS} -UKGDB ${CFILES} \
@@ -150,7 +156,7 @@ links:
SRCS= ${LANDISK}/landisk/locore.S \
param.c ioconf.c ${CFILES} ${SFILES}
depend:: .depend
-.depend: ${SRCS} assym.h param.c
+.depend: ${SRCS} assym.h param.c ${DB_STRUCTINFO}
${MKDEP} ${AFLAGS} ${CPPFLAGS} ${LANDISK}/landisk/locore.S
${MKDEP} -a ${CFLAGS} ${CPPFLAGS} param.c ioconf.c ${CFILES}
.if ${SFILES} != ""
@@ -162,6 +168,11 @@ depend:: .depend
< assym.dep >> .depend
@rm -f assym.dep
+db_structinfo.h: $S/ddb/db_structinfo.c $S/ddb/parse_structinfo.awk
+ ${CC} ${CFLAGS} ${CPPFLAGS} -gstabs -c $S/ddb/db_structinfo.c
+ objdump -g db_structinfo.o | awk -f $S/ddb/parse_structinfo.awk > $@
+ rm -f db_structinfo.o
+
# depend on root or device configuration
autoconf.o conf.o: Makefile
diff --git a/sys/arch/luna88k/conf/Makefile.luna88k b/sys/arch/luna88k/conf/Makefile.luna88k
index 261dc7dea01..a2d0cf53238 100644
--- a/sys/arch/luna88k/conf/Makefile.luna88k
+++ b/sys/arch/luna88k/conf/Makefile.luna88k
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile.luna88k,v 1.14 2009/01/11 21:02:03 pirofti Exp $
+# $OpenBSD: Makefile.luna88k,v 1.15 2009/08/09 23:04:49 miod Exp $
#
# Makefile for OpenBSD
#
@@ -50,6 +50,12 @@ AFLAGS= -x assembler-with-cpp -traditional-cpp -D_LOCORE ${CMACHFLAGS}
LINKFLAGS= -N -Ttext 0x20000 -e start
STRIPFLAGS= -d
+.if ${IDENT:M-DDDB_STRUCT}
+DB_STRUCTINFO= db_structinfo.h
+.else
+DB_STRUCTINFO=
+.endif
+
HOSTCC?= ${CC}
HOSTED_CPPFLAGS?=${CPPFLAGS:S/^-nostdinc$//}
HOSTED_CFLAGS?= ${CFLAGS}
@@ -124,7 +130,7 @@ newvers: ${SYSTEM_DEP} ${SYSTEM_SWAP_DEP}
clean::
rm -f eddep *bsd bsd.gdb tags *.[io] [a-z]*.s \
- [Ee]rrs linterrs makelinks assym.h
+ [Ee]rrs linterrs makelinks assym.h ${DB_STRUCTINFO}
lint:
@lint -hbxncez -DGENERIC -Dvolatile= ${CPPFLAGS} ${PARAM} -UKGDB \
@@ -146,7 +152,7 @@ links:
SRCS= param.c ioconf.c ${CFILES} ${SFILES}
depend:: .depend
-.depend: ${SRCS} assym.h param.c
+.depend: ${SRCS} assym.h param.c ${DB_STRUCTINFO}
${MKDEP} -a ${CFLAGS} ${CPPFLAGS} param.c ioconf.c ${CFILES}
.if !empty(SFILES)
${MKDEP} -a ${AFLAGS} ${CPPFLAGS} ${SFILES}
@@ -157,6 +163,11 @@ depend:: .depend
< assym.dep >> .depend
@rm -f assym.dep
+db_structinfo.h: $S/ddb/db_structinfo.c $S/ddb/parse_structinfo.awk
+ ${CC} ${CFLAGS} ${CPPFLAGS} -gstabs -c $S/ddb/db_structinfo.c
+ objdump -g db_structinfo.o | awk -f $S/ddb/parse_structinfo.awk > $@
+ rm -f db_structinfo.o
+
# depend on root or device configuration
autoconf.o conf.o: Makefile
diff --git a/sys/arch/mac68k/conf/Makefile.mac68k b/sys/arch/mac68k/conf/Makefile.mac68k
index 0c48b1d377a..8a9544c301f 100644
--- a/sys/arch/mac68k/conf/Makefile.mac68k
+++ b/sys/arch/mac68k/conf/Makefile.mac68k
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile.mac68k,v 1.42 2009/08/09 21:33:38 miod Exp $
+# $OpenBSD: Makefile.mac68k,v 1.43 2009/08/09 23:04:49 miod Exp $
# $NetBSD: Makefile.mac68k,v 1.53 1997/04/15 06:11:38 scottr Exp $
# Makefile for OpenBSD
@@ -51,6 +51,12 @@ AFLAGS= -x assembler-with-cpp -traditional-cpp -D_LOCORE
LINKFLAGS= -n -Ttext 0 -e start
STRIPFLAGS= -d
+.if ${IDENT:M-DDDB_STRUCT}
+DB_STRUCTINFO= db_structinfo.h
+.else
+DB_STRUCTINFO=
+.endif
+
HOSTCC?= ${CC}
HOSTED_CPPFLAGS=${CPPFLAGS:S/^-nostdinc$//}
HOSTED_CFLAGS= ${CFLAGS}
@@ -132,7 +138,7 @@ newvers: ${SYSTEM_DEP} ${SYSTEM_SWAP_DEP}
clean::
rm -f eddep *bsd bsd.gdb tags *.[io] [a-z]*.s \
- [Ee]rrs linterrs makelinks assym.h
+ [Ee]rrs linterrs makelinks assym.h ${DB_STRUCTINFO}
lint:
@lint -hbxncez -DGENERIC -Dvolatile= ${CPPFLAGS} ${PARAM} -UKGDB \
@@ -153,7 +159,7 @@ links:
SRCS= ${MAC68K}/mac68k/locore.s \
param.c ioconf.c ${CFILES} ${SFILES}
depend:: .depend
-.depend: ${SRCS} assym.h param.c
+.depend: ${SRCS} assym.h param.c ${DB_STRUCTINFO}
${MKDEP} ${AFLAGS} ${CPPFLAGS} ${MAC68K}/mac68k/locore.s
${MKDEP} -a ${CFLAGS} ${CPPFLAGS} param.c ioconf.c ${CFILES}
${MKDEP} -a ${AFLAGS} ${CPPFLAGS} ${SFILES}
@@ -166,6 +172,10 @@ depend:: .depend
< assym.dep >> .depend
@rm -f assym.dep
+db_structinfo.h: $S/ddb/db_structinfo.c $S/ddb/parse_structinfo.awk
+ ${CC} ${CFLAGS} ${CPPFLAGS} -gstabs -c $S/ddb/db_structinfo.c
+ objdump -g db_structinfo.o | awk -f $S/ddb/parse_structinfo.awk > $@
+ rm -f db_structinfo.o
# depend on root or device configuration
diff --git a/sys/arch/macppc/conf/Makefile.macppc b/sys/arch/macppc/conf/Makefile.macppc
index ae7c6af1381..721c713def3 100644
--- a/sys/arch/macppc/conf/Makefile.macppc
+++ b/sys/arch/macppc/conf/Makefile.macppc
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile.macppc,v 1.31 2009/08/09 21:33:39 miod Exp $
+# $OpenBSD: Makefile.macppc,v 1.32 2009/08/09 23:04:49 miod Exp $
#
# Makefile for OpenBSD PowerPC
#
@@ -51,6 +51,12 @@ AFLAGS= -D_LOCORE -Wa,-many
LINKFLAGS= -N -Ttext 100114 -e start --warn-common
STRIPFLAGS= -g -X -x
+.if ${IDENT:M-DDDB_STRUCT}
+DB_STRUCTINFO= db_structinfo.h
+.else
+DB_STRUCTINFO=
+.endif
+
HOSTCC?= ${CC}
HOSTED_CPPFLAGS=${CPPFLAGS:S/^-nostdinc$//}
HOSTED_CFLAGS= ${CFLAGS}
@@ -126,7 +132,7 @@ newvers: ${SYSTEM_DEP} ${SYSTEM_SWAP_DEP}
clean::
rm -f eddep *bsd bsd.gdb tags *.[io] [a-z]*.s \
- [Ee]rrs linterrs makelinks assym.h
+ [Ee]rrs linterrs makelinks assym.h ${DB_STRUCTINFO}
lint:
@lint -hbxncez -DGENERIC -Dvolatile= ${CPPFLAGS} -UKGDB ${CFILES} \
@@ -147,7 +153,7 @@ links:
SRCS= ${MACPPC}/macppc/locore.S \
param.c ioconf.c ${CFILES} ${SFILES}
depend:: .depend
-.depend: ${SRCS} assym.h param.c
+.depend: ${SRCS} assym.h param.c ${DB_STRUCTINFO}
${MKDEP} ${AFLAGS} ${CPPFLAGS} ${MACPPC}/macppc/locore.S
${MKDEP} -a ${CFLAGS} ${CPPFLAGS} param.c ioconf.c ${CFILES}
.if ${SFILES} != ""
@@ -159,6 +165,11 @@ depend:: .depend
< assym.dep >> .depend
@rm -f assym.dep
+db_structinfo.h: $S/ddb/db_structinfo.c $S/ddb/parse_structinfo.awk
+ ${CC} ${CFLAGS} ${CPPFLAGS} -gstabs -c $S/ddb/db_structinfo.c
+ objdump -g db_structinfo.o | awk -f $S/ddb/parse_structinfo.awk > $@
+ rm -f db_structinfo.o
+
# depend on root or device configuration
autoconf.o conf.o: Makefile
diff --git a/sys/arch/moko/conf/Makefile.moko b/sys/arch/moko/conf/Makefile.moko
index c14097e0af2..90b878f491a 100644
--- a/sys/arch/moko/conf/Makefile.moko
+++ b/sys/arch/moko/conf/Makefile.moko
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile.moko,v 1.2 2009/01/11 21:02:03 pirofti Exp $
+# $OpenBSD: Makefile.moko,v 1.3 2009/08/09 23:04:49 miod Exp $
# Makefile for OpenBSD
#
@@ -56,6 +56,12 @@ LINKFLAGS= -T ldscript
LINKFLAGS+= --warn-common
STRIPFLAGS= -g -X -x
+.if ${IDENT:M-DDDB_STRUCT}
+DB_STRUCTINFO= db_structinfo.h
+.else
+DB_STRUCTINFO=
+.endif
+
HOSTCC= ${CC}
HOSTED_CPPFLAGS=${CPPFLAGS:S/^-nostdinc$//}
HOSTED_CFLAGS= ${CFLAGS}
@@ -140,7 +146,7 @@ newvers: ${SYSTEM_DEP} ${SYSTEM_SWAP_DEP}
clean::
rm -f eddep *bsd bsd.gdb tags *.[io] [a-z]*.s \
- [Ee]rrs linterrs makelinks assym.h
+ [Ee]rrs linterrs makelinks assym.h ${DB_STRUCTINFO}
lint:
@lint -hbxncez -Dvolatile= ${CPPFLAGS} ${PARAM} -UKGDB \
@@ -161,7 +167,7 @@ links:
SRCS= ${ARM}/arm/locore.S \
param.c ioconf.c ${CFILES} ${SFILES}
depend:: .depend
-.depend: ${SRCS} assym.h param.c ${APMINC}
+.depend: ${SRCS} assym.h param.c ${APMINC} ${DB_STRUCTINFO}
${MKDEP} ${AFLAGS} ${CPPFLAGS} ${ARM}/arm/locore.S
${MKDEP} -a ${CFLAGS} ${CPPFLAGS} param.c ioconf.c ${CFILES}
.if ${SFILES} != ""
@@ -174,6 +180,11 @@ depend:: .depend
< assym.dep >> .depend
@rm -f assym.dep
+db_structinfo.h: $S/ddb/db_structinfo.c $S/ddb/parse_structinfo.awk
+ ${CC} ${CFLAGS} ${CPPFLAGS} -gstabs -c $S/ddb/db_structinfo.c
+ objdump -g db_structinfo.o | awk -f $S/ddb/parse_structinfo.awk > $@
+ rm -f db_structinfo.o
+
# depend on root or device configuration
autoconf.o conf.o: Makefile
diff --git a/sys/arch/mvme68k/conf/Makefile.mvme68k b/sys/arch/mvme68k/conf/Makefile.mvme68k
index 0871cbb2cbf..c227f1705ce 100644
--- a/sys/arch/mvme68k/conf/Makefile.mvme68k
+++ b/sys/arch/mvme68k/conf/Makefile.mvme68k
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile.mvme68k,v 1.34 2009/08/09 21:33:39 miod Exp $
+# $OpenBSD: Makefile.mvme68k,v 1.35 2009/08/09 23:04:49 miod Exp $
# This makefile is constructed from a machine description:
# config machineid
@@ -50,6 +50,12 @@ AFLAGS= -x assembler-with-cpp -traditional-cpp -D_LOCORE
LINKFLAGS= -Ttext 0x10000 -z -e start
STRIPFLAGS= -d
+.if ${IDENT:M-DDDB_STRUCT}
+DB_STRUCTINFO= db_structinfo.h
+.else
+DB_STRUCTINFO=
+.endif
+
HOSTCC= ${CC}
HOSTED_CPPFLAGS=${CPPFLAGS:S/^-nostdinc$//}
HOSTED_CFLAGS= ${CFLAGS}
@@ -126,7 +132,7 @@ newvers: ${SYSTEM_DEP} ${SYSTEM_SWAP_DEP}
clean::
rm -f eddep bsd bsd.gdb tags *.[io] [a-z]*.s \
- [Ee]rrs linterrs makelinks assym.h
+ [Ee]rrs linterrs makelinks assym.h ${DB_STRUCTINFO}
lint: /tmp param.c
@lint -hbxn -DGENERIC -Dvolatile= ${COPTS} ${PARAM} -UKGDB \
@@ -148,7 +154,7 @@ links:
SRCS= ${MVME68K}/mvme68k/locore.s \
param.c ioconf.c ${CFILES} ${SFILES}
depend:: .depend
-.depend: ${SRCS} assym.h param.c
+.depend: ${SRCS} assym.h param.c ${DB_STRUCTINFO}
${MKDEP} ${AFLAGS} ${CPPFLAGS} ${MVME68K}/mvme68k/locore.s
${MKDEP} -a ${CFLAGS} ${CPPFLAGS} param.c ioconf.c ${CFILES}
${MKDEP} -a ${AFLAGS} ${CPPFLAGS} ${SFILES}
@@ -158,6 +164,11 @@ depend:: .depend
< assym.dep >> .depend
@rm -f assym.dep
+db_structinfo.h: $S/ddb/db_structinfo.c $S/ddb/parse_structinfo.awk
+ ${CC} ${CFLAGS} ${CPPFLAGS} -gstabs -c $S/ddb/db_structinfo.c
+ objdump -g db_structinfo.o | awk -f $S/ddb/parse_structinfo.awk > $@
+ rm -f db_structinfo.o
+
# depend on root or device configuration
autoconf.o conf.o: Makefile
diff --git a/sys/arch/mvme88k/conf/Makefile.mvme88k b/sys/arch/mvme88k/conf/Makefile.mvme88k
index bc6f06f942d..7bcdbfbf545 100644
--- a/sys/arch/mvme88k/conf/Makefile.mvme88k
+++ b/sys/arch/mvme88k/conf/Makefile.mvme88k
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile.mvme88k,v 1.45 2009/01/11 21:02:03 pirofti Exp $
+# $OpenBSD: Makefile.mvme88k,v 1.46 2009/08/09 23:04:49 miod Exp $
#
# Makefile for OpenBSD
#
@@ -50,6 +50,12 @@ AFLAGS= -x assembler-with-cpp -traditional-cpp -D_LOCORE ${CMACHFLAGS}
LINKFLAGS= -Ttext 0x10000 -e start
STRIPFLAGS= -d
+.if ${IDENT:M-DDDB_STRUCT}
+DB_STRUCTINFO= db_structinfo.h
+.else
+DB_STRUCTINFO=
+.endif
+
HOSTCC?= ${CC}
HOSTED_CPPFLAGS?=${CPPFLAGS:S/^-nostdinc$//}
HOSTED_CFLAGS?= ${CFLAGS}
@@ -127,7 +133,7 @@ newvers: ${SYSTEM_DEP} ${SYSTEM_SWAP_DEP}
clean::
rm -f eddep *bsd bsd.gdb tags *.[io] [a-z]*.s \
- [Ee]rrs linterrs makelinks assym.h
+ [Ee]rrs linterrs makelinks assym.h ${DB_STRUCTINFO}
lint:
@lint -hbxncez -DGENERIC -Dvolatile= ${CPPFLAGS} ${PARAM} -UKGDB \
@@ -149,7 +155,7 @@ links:
SRCS= param.c ioconf.c ${CFILES} ${SFILES}
depend:: .depend
-.depend: ${SRCS} assym.h param.c
+.depend: ${SRCS} assym.h param.c ${DB_STRUCTINFO}
${MKDEP} -a ${CFLAGS} ${CPPFLAGS} param.c ioconf.c ${CFILES}
.if !empty(SFILES)
${MKDEP} -a ${AFLAGS} ${CPPFLAGS} ${SFILES}
@@ -160,6 +166,11 @@ depend:: .depend
< assym.dep >> .depend
@rm -f assym.dep
+db_structinfo.h: $S/ddb/db_structinfo.c $S/ddb/parse_structinfo.awk
+ ${CC} ${CFLAGS} ${CPPFLAGS} -gstabs -c $S/ddb/db_structinfo.c
+ objdump -g db_structinfo.o | awk -f $S/ddb/parse_structinfo.awk > $@
+ rm -f db_structinfo.o
+
# depend on root or device configuration
autoconf.o conf.o: Makefile
diff --git a/sys/arch/mvmeppc/conf/Makefile.mvmeppc b/sys/arch/mvmeppc/conf/Makefile.mvmeppc
index db542cd0d2d..3facc2dae59 100644
--- a/sys/arch/mvmeppc/conf/Makefile.mvmeppc
+++ b/sys/arch/mvmeppc/conf/Makefile.mvmeppc
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile.mvmeppc,v 1.29 2009/08/09 21:33:39 miod Exp $
+# $OpenBSD: Makefile.mvmeppc,v 1.30 2009/08/09 23:04:49 miod Exp $
#
# Makefile for OpenBSD PowerPC
#
@@ -51,6 +51,12 @@ AFLAGS= -D_LOCORE
LINKFLAGS= -N -Ttext 100114 -e start --warn-common
STRIPFLAGS= -g -X -x
+.if ${IDENT:M-DDDB_STRUCT}
+DB_STRUCTINFO= db_structinfo.h
+.else
+DB_STRUCTINFO=
+.endif
+
HOSTCC?= ${CC}
HOSTED_CPPFLAGS=${CPPFLAGS:S/^-nostdinc$//}
HOSTED_CFLAGS= ${CFLAGS}
@@ -126,7 +132,7 @@ newvers: ${SYSTEM_DEP} ${SYSTEM_SWAP_DEP}
clean::
rm -f eddep *bsd bsd.gdb tags *.[io] [a-z]*.s \
- [Ee]rrs linterrs makelinks assym.h
+ [Ee]rrs linterrs makelinks assym.h ${DB_STRUCTINFO}
lint:
@lint -hbxncez -DGENERIC -Dvolatile= ${CPPFLAGS} -UKGDB ${CFILES} \
@@ -147,7 +153,7 @@ links:
SRCS= ${MVMEPPC}/mvmeppc/locore.S \
param.c ioconf.c ${CFILES} ${SFILES}
depend:: .depend
-.depend: ${SRCS} assym.h param.c
+.depend: ${SRCS} assym.h param.c ${DB_STRUCTINFO}
${MKDEP} ${AFLAGS} ${CPPFLAGS} ${MVMEPPC}/mvmeppc/locore.S
${MKDEP} -a ${CFLAGS} ${CPPFLAGS} param.c ioconf.c ${CFILES}
.if ${SFILES} != ""
@@ -159,6 +165,11 @@ depend:: .depend
< assym.dep >> .depend
@rm -f assym.dep
+db_structinfo.h: $S/ddb/db_structinfo.c $S/ddb/parse_structinfo.awk
+ ${CC} ${CFLAGS} ${CPPFLAGS} -gstabs -c $S/ddb/db_structinfo.c
+ objdump -g db_structinfo.o | awk -f $S/ddb/parse_structinfo.awk > $@
+ rm -f db_structinfo.o
+
# depend on root or device configuration
autoconf.o conf.o: Makefile
diff --git a/sys/arch/sgi/conf/Makefile.sgi b/sys/arch/sgi/conf/Makefile.sgi
index b3d156431c2..434ef5af0c1 100644
--- a/sys/arch/sgi/conf/Makefile.sgi
+++ b/sys/arch/sgi/conf/Makefile.sgi
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile.sgi,v 1.23 2009/08/09 21:33:39 miod Exp $
+# $OpenBSD: Makefile.sgi,v 1.24 2009/08/09 23:04:49 miod Exp $
# Makefile for OpenBSD
#
@@ -60,6 +60,12 @@ CFLAGS= ${DEBUG} ${CDIAGFLAGS} ${CMACHFLAGS} ${COPTS} ${PIPE}
AFLAGS= -x assembler-with-cpp -mno-abicalls ${ABI} -D_LOCORE
STRIPFLAGS= -g -X -x
+.if ${IDENT:M-DDDB_STRUCT}
+DB_STRUCTINFO= db_structinfo.h
+.else
+DB_STRUCTINFO=
+.endif
+
NORMAL_C_NOP= ${CC} ${CFLAGS} ${CPPFLAGS} -c $<
NORMAL_C= ${CC} ${CFLAGS} ${CPPFLAGS} ${PROF} -c $<
NORMAL_C_C= ${CC} ${CFLAGS} ${CPPFLAGS} ${PROF} ${PARAM} -c $<
@@ -108,7 +114,7 @@ newvers:
clean::
rm -f eddep bsd bsd.gdb tags *.[io] [a-z]*.s \
- [Ee]rrs linterrs makelinks assym.h
+ [Ee]rrs linterrs makelinks assym.h ${DB_STRUCTINFO}
lint: /tmp param.c
@lint -hbxn -DGENERIC -Dvolatile= ${COPTS} ${PARAM} -UKGDB \
@@ -168,7 +174,7 @@ newvers: ${SYSTEM_DEP} ${SYSTEM_SWAP_DEP}
SRCS= ${SGI}/sgi/locore.S \
param.c ioconf.c ${CFILES} ${SFILES}
depend:: .depend
-.depend: ${SRCS} assym.h param.c
+.depend: ${SRCS} assym.h param.c ${DB_STRUCTINFO}
${MKDEP} ${AFLAGS} ${CPPFLAGS} ${SGI}/sgi/locore.S
${MKDEP} -a ${CFLAGS} ${CPPFLAGS} param.c ioconf.c ${CFILES}
${MKDEP} -a ${AFLAGS} ${CPPFLAGS} ${SFILES}
@@ -178,6 +184,11 @@ depend:: .depend
< assym.dep >> .depend
@rm -f assym.dep
+db_structinfo.h: $S/ddb/db_structinfo.c $S/ddb/parse_structinfo.awk
+ ${CC} ${CFLAGS} ${CPPFLAGS} -gstabs -c $S/ddb/db_structinfo.c
+ objdump -g db_structinfo.o | awk -f $S/ddb/parse_structinfo.awk > $@
+ rm -f db_structinfo.o
+
# The install target can be redefined by putting a
# install-kernel-${MACHINE_NAME} target into /etc/mk.conf
MACHINE_NAME!= uname -n
diff --git a/sys/arch/socppc/conf/Makefile.socppc b/sys/arch/socppc/conf/Makefile.socppc
index 0d5b92fc285..b13f33fb9be 100644
--- a/sys/arch/socppc/conf/Makefile.socppc
+++ b/sys/arch/socppc/conf/Makefile.socppc
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile.socppc,v 1.3 2009/08/09 21:33:39 miod Exp $
+# $OpenBSD: Makefile.socppc,v 1.4 2009/08/09 23:04:49 miod Exp $
#
# Makefile for OpenBSD PowerPC
#
@@ -51,6 +51,12 @@ AFLAGS= -D_LOCORE -Wa,-many
LINKFLAGS= -N -Ttext 200000 -e start --warn-common
STRIPFLAGS= -g -X -x
+.if ${IDENT:M-DDDB_STRUCT}
+DB_STRUCTINFO= db_structinfo.h
+.else
+DB_STRUCTINFO=
+.endif
+
HOSTCC?= ${CC}
HOSTED_CPPFLAGS=${CPPFLAGS:S/^-nostdinc$//}
HOSTED_CFLAGS= ${CFLAGS}
@@ -126,7 +132,7 @@ newvers: ${SYSTEM_DEP} ${SYSTEM_SWAP_DEP}
clean::
rm -f eddep *bsd bsd.gdb tags *.[io] [a-z]*.s \
- [Ee]rrs linterrs makelinks assym.h
+ [Ee]rrs linterrs makelinks assym.h ${DB_STRUCTINFO}
lint:
@lint -hbxncez -DGENERIC -Dvolatile= ${CPPFLAGS} -UKGDB ${CFILES} \
@@ -147,7 +153,7 @@ links:
SRCS= ${SOCPPC}/socppc/locore.S \
param.c ioconf.c ${CFILES} ${SFILES}
depend:: .depend
-.depend: ${SRCS} assym.h param.c
+.depend: ${SRCS} assym.h param.c ${DB_STRUCTINFO}
${MKDEP} ${AFLAGS} ${CPPFLAGS} ${SOCPPC}/socppc/locore.S
${MKDEP} -a ${CFLAGS} ${CPPFLAGS} param.c ioconf.c ${CFILES}
.if ${SFILES} != ""
@@ -159,6 +165,11 @@ depend:: .depend
< assym.dep >> .depend
@rm -f assym.dep
+db_structinfo.h: $S/ddb/db_structinfo.c $S/ddb/parse_structinfo.awk
+ ${CC} ${CFLAGS} ${CPPFLAGS} -gstabs -c $S/ddb/db_structinfo.c
+ objdump -g db_structinfo.o | awk -f $S/ddb/parse_structinfo.awk > $@
+ rm -f db_structinfo.o
+
# depend on root or device configuration
autoconf.o conf.o: Makefile
diff --git a/sys/arch/solbourne/conf/Makefile.solbourne b/sys/arch/solbourne/conf/Makefile.solbourne
index 1e8cf824423..b18234ad9b4 100644
--- a/sys/arch/solbourne/conf/Makefile.solbourne
+++ b/sys/arch/solbourne/conf/Makefile.solbourne
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile.solbourne,v 1.10 2009/08/09 21:33:39 miod Exp $
+# $OpenBSD: Makefile.solbourne,v 1.11 2009/08/09 23:04:49 miod Exp $
# Makefile for OpenBSD
#
@@ -52,6 +52,12 @@ AFLAGS= -x assembler-with-cpp -traditional-cpp -D_LOCORE
LINKFLAGS= -N -e start -T ${SOLBOURNE}/conf/ld.script -Ttext FD084000
STRIPFLAGS= -g -X -x
+.if ${IDENT:M-DDDB_STRUCT}
+DB_STRUCTINFO= db_structinfo.h
+.else
+DB_STRUCTINFO=
+.endif
+
HOSTCC= ${CC}
HOSTED_CPPFLAGS=${CPPFLAGS:S/^-nostdinc$//}
HOSTED_CFLAGS= ${CFLAGS}
@@ -129,7 +135,7 @@ newvers: ${SYSTEM_DEP} ${SYSTEM_SWAP_DEP}
clean::
rm -f eddep *bsd *bsd.gdb tags *.[io] [a-z]*.s \
- [Ee]rrs linterrs makelinks assym.h
+ [Ee]rrs linterrs makelinks assym.h ${DB_STRUCTINFO}
lint:
@lint -hbxncez -DGENERIC -Dvolatile= ${CPPFLAGS} ${PARAM} -UKGDB \
@@ -150,7 +156,7 @@ links:
SRCS= ${SOLBOURNE}/solbourne/locore.s \
param.c ioconf.c ${CFILES} ${SFILES}
depend:: .depend
-.depend: ${SRCS} assym.h param.c
+.depend: ${SRCS} assym.h param.c ${DB_STRUCTINFO}
${MKDEP} ${AFLAGS} ${CPPFLAGS} ${SOLBOURNE}/solbourne/locore.s
${MKDEP} -a ${CFLAGS} ${CPPFLAGS} param.c ioconf.c ${CFILES}
.if !empty(SFILES)
@@ -162,6 +168,11 @@ depend:: .depend
< assym.dep >> .depend
@rm -f assym.dep
+db_structinfo.h: $S/ddb/db_structinfo.c $S/ddb/parse_structinfo.awk
+ ${CC} ${CFLAGS} ${CPPFLAGS} -gstabs -c $S/ddb/db_structinfo.c
+ objdump -g db_structinfo.o | awk -f $S/ddb/parse_structinfo.awk > $@
+ rm -f db_structinfo.o
+
locore.o: ${SOLBOURNE}/solbourne/locore.s assym.h
${NORMAL_S}
diff --git a/sys/arch/sparc/conf/Makefile.sparc b/sys/arch/sparc/conf/Makefile.sparc
index 6945522d931..7f1674c93a5 100644
--- a/sys/arch/sparc/conf/Makefile.sparc
+++ b/sys/arch/sparc/conf/Makefile.sparc
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile.sparc,v 1.46 2009/08/09 21:33:39 miod Exp $
+# $OpenBSD: Makefile.sparc,v 1.47 2009/08/09 23:04:49 miod Exp $
# $NetBSD: Makefile.sparc,v 1.32.4.1 1996/06/12 20:26:32 pk Exp $
# Makefile for OpenBSD
@@ -58,6 +58,12 @@ AFLAGS= -x assembler-with-cpp -traditional-cpp -D_LOCORE
LINKFLAGS= -N -e start -Ttext F8004000
STRIPFLAGS= -g -X -x
+.if ${IDENT:M-DDDB_STRUCT}
+DB_STRUCTINFO= db_structinfo.h
+.else
+DB_STRUCTINFO=
+.endif
+
HOSTCC= ${CC}
HOSTED_CPPFLAGS=${CPPFLAGS:S/^-nostdinc$//}
HOSTED_CFLAGS= ${CFLAGS}
@@ -135,7 +141,7 @@ newvers: ${SYSTEM_DEP} ${SYSTEM_SWAP_DEP}
clean::
rm -f eddep *bsd *bsd.gdb tags *.[io] [a-z]*.s \
- [Ee]rrs linterrs makelinks assym.h
+ [Ee]rrs linterrs makelinks assym.h ${DB_STRUCTINFO}
lint:
@lint -hbxncez -DGENERIC -Dvolatile= ${CPPFLAGS} ${PARAM} -UKGDB \
@@ -156,7 +162,7 @@ links:
SRCS= ${SPARC}/sparc/locore.s \
param.c ioconf.c ${CFILES} ${SFILES}
depend:: .depend
-.depend: ${SRCS} assym.h param.c
+.depend: ${SRCS} assym.h param.c ${DB_STRUCTINFO}
${MKDEP} ${AFLAGS} ${CPPFLAGS} ${SPARC}/sparc/locore.s
${MKDEP} -a ${CFLAGS} ${CPPFLAGS} param.c ioconf.c ${CFILES}
.if !empty(SFILES)
@@ -168,6 +174,11 @@ depend:: .depend
< assym.dep >> .depend
@rm -f assym.dep
+db_structinfo.h: $S/ddb/db_structinfo.c $S/ddb/parse_structinfo.awk
+ ${CC} ${CFLAGS} ${CPPFLAGS} -gstabs -c $S/ddb/db_structinfo.c
+ objdump -g db_structinfo.o | awk -f $S/ddb/parse_structinfo.awk > $@
+ rm -f db_structinfo.o
+
# depend on root or device configuration
autoconf.o conf.o: Makefile
diff --git a/sys/arch/sparc64/conf/Makefile.sparc64 b/sys/arch/sparc64/conf/Makefile.sparc64
index fbd4a01d8c0..0087d1244f0 100644
--- a/sys/arch/sparc64/conf/Makefile.sparc64
+++ b/sys/arch/sparc64/conf/Makefile.sparc64
@@ -29,6 +29,12 @@ AFLAGS= -x assembler-with-cpp -traditional-cpp -D_LOCORE -Wa,-Av9b
LINKFLAGS= -n -Ttext 01000000 -Tdata 01800000 -e start -N
STRIPFLAGS= -g -X -x
+.if ${IDENT:M-DDDB_STRUCT}
+DB_STRUCTINFO= db_structinfo.h
+.else
+DB_STRUCTINFO=
+.endif
+
HOSTCC= ${CC}
HOSTED_CPPFLAGS=${CPPFLAGS:S/^-nostdinc$//}
HOSTED_CFLAGS= ${CFLAGS}
@@ -106,7 +112,7 @@ newvers: ${SYSTEM_DEP} ${SYSTEM_SWAP_DEP}
clean::
rm -f eddep *bsd *bsd.gdb tags *.[io] [a-z]*.s \
- [Ee]rrs linterrs makelinks assym.h
+ [Ee]rrs linterrs makelinks assym.h ${DB_STRUCTINFO}
lint:
@lint -hbxncez -DGENERIC -Dvolatile= ${CPPFLAGS} ${PARAM} -UKGDB \
@@ -127,7 +133,7 @@ links:
SRCS= ${SPARC64}/sparc64/locore.s \
param.c ioconf.c ${CFILES} ${SFILES}
depend:: .depend
-.depend: ${SRCS} assym.h param.c
+.depend: ${SRCS} assym.h param.c ${DB_STRUCTINFO}
${MKDEP} ${AFLAGS} ${CPPFLAGS} ${SPARC64}/sparc64/locore.s
${MKDEP} -a ${CFLAGS} ${CPPFLAGS} param.c ioconf.c ${CFILES}
.if !empty(SFILES)
@@ -139,6 +145,11 @@ depend:: .depend
< assym.dep >> .depend
@rm -f assym.dep
+db_structinfo.h: $S/ddb/db_structinfo.c $S/ddb/parse_structinfo.awk
+ ${CC} ${CFLAGS} ${CPPFLAGS} -gstabs -c $S/ddb/db_structinfo.c
+ objdump -g db_structinfo.o | awk -f $S/ddb/parse_structinfo.awk > $@
+ rm -f db_structinfo.o
+
locore.o: ${SPARC64}/sparc64/locore.s assym.h
${NORMAL_S}
diff --git a/sys/arch/vax/conf/Makefile.vax b/sys/arch/vax/conf/Makefile.vax
index ca1b279da76..11e75ab8abd 100644
--- a/sys/arch/vax/conf/Makefile.vax
+++ b/sys/arch/vax/conf/Makefile.vax
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile.vax,v 1.33 2009/01/11 21:02:03 pirofti Exp $
+# $OpenBSD: Makefile.vax,v 1.34 2009/08/09 23:04:49 miod Exp $
# $NetBSD: Makefile.vax,v 1.49 1999/07/26 05:20:49 cgd Exp $
# Makefile for OpenBSD/vax
@@ -77,6 +77,12 @@ AFLAGS= -x assembler-with-cpp -traditional-cpp -D_LOCORE
LINKFLAGS= -N -Ttext 80000000 -e start
STRIPFLAGS= -d
+.if ${IDENT:M-DDDB_STRUCT}
+DB_STRUCTINFO= db_structinfo.h
+.else
+DB_STRUCTINFO=
+.endif
+
HOSTED_CC= ${CC}
HOSTED_CPPFLAGS=${CPPFLAGS:S/^-nostdinc$//}
HOSTED_CFLAGS= ${CFLAGS}
@@ -141,7 +147,7 @@ newvers: ${SYSTEM_DEP} ${SYSTEM_SWAP_DEP}
clean:: cleankernel
cleankernel:
rm -f eddep *bsd bsd.gdb tags *.[io] [a-z]*.s \
- [Ee]rrs linterrs makelinks assym.h
+ [Ee]rrs linterrs makelinks assym.h ${DB_STRUCTINFO}
lint:
@lint -hbxncez -Dvolatile= ${CPPFLAGS} -UKGDB \
@@ -164,7 +170,7 @@ SRCS= ${VAX}/vax/intvec.s ${VAX}/vax/subr.s \
param.c ioconf.c ${CFILES} ${SFILES}
depend:: .depend
-.depend: ${SRCS} assym.h param.c
+.depend: ${SRCS} assym.h param.c ${DB_STRUCTINFO}
${MKDEP} ${AFLAGS} ${CPPFLAGS} ${VAX}/vax/intvec.s ${VAX}/vax/subr.s
${MKDEP} -a ${CFLAGS} ${CPPFLAGS} param.c ioconf.c ${CFILES}
${MKDEP} -a ${AFLAGS} ${CPPFLAGS} ${SFILES}
@@ -174,6 +180,11 @@ depend:: .depend
< assym.dep >> .depend
@rm -f assym.dep
+db_structinfo.h: $S/ddb/db_structinfo.c $S/ddb/parse_structinfo.awk
+ ${CC} ${CFLAGS} ${CPPFLAGS} -gstabs -c $S/ddb/db_structinfo.c
+ objdump -g db_structinfo.o | awk -f $S/ddb/parse_structinfo.awk > $@
+ rm -f db_structinfo.o
+
# depend on root or device configuration
autoconf.o conf.o: Makefile
diff --git a/sys/arch/zaurus/conf/Makefile.zaurus b/sys/arch/zaurus/conf/Makefile.zaurus
index 4c971954f04..47e655fe4ef 100644
--- a/sys/arch/zaurus/conf/Makefile.zaurus
+++ b/sys/arch/zaurus/conf/Makefile.zaurus
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile.zaurus,v 1.13 2009/01/11 21:02:03 pirofti Exp $
+# $OpenBSD: Makefile.zaurus,v 1.14 2009/08/09 23:04:49 miod Exp $
# $NetBSD: Makefile.i386,v 1.67 1996/05/11 16:12:11 mycroft Exp $
# Makefile for OpenBSD
@@ -57,6 +57,12 @@ LINKFLAGS= -T ldscript
LINKFLAGS+= --warn-common
STRIPFLAGS= -g -X -x
+.if ${IDENT:M-DDDB_STRUCT}
+DB_STRUCTINFO= db_structinfo.h
+.else
+DB_STRUCTINFO=
+.endif
+
HOSTCC= ${CC}
HOSTED_CPPFLAGS=${CPPFLAGS:S/^-nostdinc$//}
HOSTED_CFLAGS= ${CFLAGS}
@@ -141,7 +147,7 @@ newvers: ${SYSTEM_DEP} ${SYSTEM_SWAP_DEP}
clean::
rm -f eddep *bsd bsd.gdb tags *.[io] [a-z]*.s \
- [Ee]rrs linterrs makelinks assym.h
+ [Ee]rrs linterrs makelinks assym.h ${DB_STRUCTINFO}
lint:
@lint -hbxncez -Dvolatile= ${CPPFLAGS} ${PARAM} -UKGDB \
@@ -162,7 +168,7 @@ links:
SRCS= ${ARM}/arm/locore.S \
param.c ioconf.c ${CFILES} ${SFILES}
depend:: .depend
-.depend: ${SRCS} assym.h param.c ${APMINC}
+.depend: ${SRCS} assym.h param.c ${APMINC} ${DB_STRUCTINFO}
${MKDEP} ${AFLAGS} ${CPPFLAGS} ${ARM}/arm/locore.S
${MKDEP} -a ${CFLAGS} ${CPPFLAGS} param.c ioconf.c ${CFILES}
.if ${SFILES} != ""
@@ -175,6 +181,11 @@ depend:: .depend
< assym.dep >> .depend
@rm -f assym.dep
+db_structinfo.h: $S/ddb/db_structinfo.c $S/ddb/parse_structinfo.awk
+ ${CC} ${CFLAGS} ${CPPFLAGS} -gstabs -c $S/ddb/db_structinfo.c
+ objdump -g db_structinfo.o | awk -f $S/ddb/parse_structinfo.awk > $@
+ rm -f db_structinfo.o
+
# depend on root or device configuration
autoconf.o conf.o: Makefile
diff --git a/sys/conf/files b/sys/conf/files
index 90f9e43b00b..bbfedc902bd 100644
--- a/sys/conf/files
+++ b/sys/conf/files
@@ -1,4 +1,4 @@
-# $OpenBSD: files,v 1.469 2009/08/09 12:47:23 dlg Exp $
+# $OpenBSD: files,v 1.470 2009/08/09 23:04:49 miod Exp $
# $NetBSD: files,v 1.87 1996/05/19 17:17:50 jonathan Exp $
# @(#)files.newconf 7.5 (Berkeley) 5/10/93
@@ -545,18 +545,19 @@ file ddb/db_command.c ddb
file ddb/db_elf.c ddb
file ddb/db_examine.c ddb
file ddb/db_expr.c ddb
+file ddb/db_hangman.c ddb
file ddb/db_input.c ddb
file ddb/db_lex.c ddb
file ddb/db_output.c ddb
file ddb/db_print.c ddb
file ddb/db_run.c ddb | kgdb
+file ddb/db_struct.c ddb & ddb_struct
file ddb/db_sym.c ddb
file ddb/db_trap.c ddb
file ddb/db_variables.c ddb
file ddb/db_watch.c ddb
file ddb/db_write_cmd.c ddb
file ddb/db_usrreq.c ddb
-file ddb/db_hangman.c ddb
file dev/auconv.c auconv
file dev/audio.c audio needs-flag
file dev/ccd.c ccd needs-flag
diff --git a/sys/ddb/db_command.c b/sys/ddb/db_command.c
index 8e4b9239b38..cdfbb648979 100644
--- a/sys/ddb/db_command.c
+++ b/sys/ddb/db_command.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: db_command.c,v 1.55 2009/08/08 15:04:43 beck Exp $ */
+/* $OpenBSD: db_command.c,v 1.56 2009/08/09 23:04:49 miod Exp $ */
/* $NetBSD: db_command.c,v 1.20 1996/03/30 22:30:05 christos Exp $ */
/*
@@ -472,17 +472,23 @@ struct db_command db_show_cmds[] = {
{ "malloc", db_malloc_print_cmd, 0, NULL },
{ "map", db_map_print_cmd, 0, NULL },
{ "mount", db_mount_print_cmd, 0, NULL },
+#ifdef NFSCLIENT
+ { "nfsreq", db_nfsreq_print_cmd, 0, NULL },
+#endif
{ "object", db_object_print_cmd, 0, NULL },
+#ifdef DDB_STRUCT_INFORMATION
+ { "offset", db_struct_offset_cmd, CS_OWN, NULL },
+#endif
{ "page", db_page_print_cmd, 0, NULL },
{ "panic", db_show_panic_cmd, 0, NULL },
{ "pool", db_pool_print_cmd, 0, NULL },
{ "proc", db_proc_print_cmd, 0, NULL },
{ "registers", db_show_regs, 0, NULL },
+#ifdef DDB_STRUCT_INFORMATION
+ { "struct", db_struct_layout_cmd, CS_OWN, NULL },
+#endif
{ "uvmexp", db_uvmexp_print_cmd, 0, NULL },
{ "vnode", db_vnode_print_cmd, 0, NULL },
-#ifdef NFSCLIENT
- { "nfsreq", db_nfsreq_print_cmd, 0, NULL },
-#endif
{ "watches", db_listwatch_cmd, 0, NULL },
{ NULL, NULL, 0, NULL }
};
diff --git a/sys/ddb/db_command.h b/sys/ddb/db_command.h
index a2d7bde4c92..5350d8204ec 100644
--- a/sys/ddb/db_command.h
+++ b/sys/ddb/db_command.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: db_command.h,v 1.25 2009/08/08 15:04:43 beck Exp $ */
+/* $OpenBSD: db_command.h,v 1.26 2009/08/09 23:04:49 miod Exp $ */
/* $NetBSD: db_command.h,v 1.8 1996/02/05 01:56:55 christos Exp $ */
/*
@@ -66,6 +66,8 @@ void db_stack_trace_cmd(db_expr_t, int, db_expr_t, char *);
void db_dmesg_cmd(db_expr_t, int, db_expr_t, char *);
void db_show_panic_cmd(db_expr_t, int, db_expr_t, char *);
void db_bcstats_print_cmd(db_expr_t, int, db_expr_t, char *);
+void db_struct_offset_cmd(db_expr_t, int, db_expr_t, char *);
+void db_struct_layout_cmd(db_expr_t, int, db_expr_t, char *);
extern db_addr_t db_dot, db_last_addr, db_prev, db_next;
diff --git a/sys/ddb/db_struct.c b/sys/ddb/db_struct.c
new file mode 100644
index 00000000000..373cd2c53eb
--- /dev/null
+++ b/sys/ddb/db_struct.c
@@ -0,0 +1,271 @@
+/* $OpenBSD: db_struct.c,v 1.1 2009/08/09 23:04:49 miod Exp $ */
+
+/*
+ * Copyright (c) 2009 Miodrag Vallat.
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/*
+ * ddb routines to describe struct information
+ */
+
+#include <sys/param.h>
+#include <sys/systm.h>
+
+#include <machine/db_machdep.h>
+
+#include <ddb/db_lex.h>
+#include <ddb/db_output.h>
+#include <ddb/db_access.h>
+#include <ddb/db_command.h>
+#include <ddb/db_extern.h>
+#include <ddb/db_interface.h>
+#include <ddb/db_var.h>
+
+#include "db_structinfo.h"
+
+void db_struct_print_field(uint, int, db_expr_t);
+
+/*
+ * Flags to pass db_struct_printf().
+ */
+
+#define DBSP_STRUCT_NAME 0x01 /* prepend struct name */
+#define DBSP_VALUE 0x02 /* display field value */
+
+void
+db_struct_print_field(uint fidx, int flags, db_expr_t baseaddr)
+{
+ const struct ddb_field_info *field;
+ const struct ddb_struct_info *struc;
+ db_expr_t value;
+ uint tmp;
+ size_t namelen;
+ int width, basecol, curcol;
+ char tmpfmt[28];
+
+ field = &ddb_field_info[fidx];
+ basecol = 0;
+
+ if (ISSET(flags, DBSP_STRUCT_NAME)) {
+ struc = &ddb_struct_info[field->sidx];
+ namelen = strlen(struc->name);
+ db_printf("%-30s ", struc->name);
+ if (namelen > 30)
+ basecol += namelen + 1;
+ else
+ basecol += 30 + 1;
+ }
+
+ namelen = strlen(field->name);
+ if (field->nitems == 1) {
+ db_printf("%-30s ", field->name);
+ if (namelen > 30)
+ basecol += namelen + 1;
+ else
+ basecol += 30 + 1;
+ } else {
+ width = 30 - 2;
+ tmp = field->nitems;
+ while (tmp != 0) {
+ width--;
+ tmp /= 10;
+ }
+ if (namelen >= width) {
+ db_printf("%s[%zu] ", field->name, field->nitems);
+ basecol += namelen + (30 - width) + 1;
+ } else {
+ db_printf("%s[%zu]%*s ", field->name, field->nitems,
+ width - (int)namelen, "");
+ /* namelen + (30-width) + (width-namelen) + 1 */
+ basecol += 30 + 1;
+ }
+ }
+
+ if (field->size == 0) {
+ db_printf("bitfield");
+ /* basecol irrelevant from there on */
+ } else {
+ snprintf(tmpfmt, sizeof tmpfmt, "%zu", field->size);
+ basecol += strlen(tmpfmt) + 1;
+ db_printf("%s ", tmpfmt);
+ }
+
+ if (ISSET(flags, DBSP_VALUE)) {
+ /* only print the field value if it has a friendly size. */
+ switch (field->size) {
+ case 1:
+ width = 4;
+ break;
+ case 2:
+ width = 8;
+ break;
+ case 4:
+ width = 12;
+ break;
+#ifdef __LP64__
+ case 8:
+ width = 20;
+ break;
+#endif
+ default:
+ width = 0;
+ }
+ if (width != 0) {
+ baseaddr += field->offs;
+ curcol = basecol;
+ for (tmp = field->nitems; tmp != 0; tmp--) {
+ value = db_get_value(baseaddr, field->size,
+ FALSE); /* assume unsigned */
+ db_format(tmpfmt, sizeof tmpfmt, (long)value,
+ DB_FORMAT_N, 0, width);
+ if (field->nitems > 1)
+ db_printf("%s", tmpfmt);
+ else
+ db_printf("%20s", tmpfmt);
+ baseaddr += field->size;
+
+ /*
+ * Try to fit array elements on as few lines
+ * as possible.
+ */
+ if (field->nitems > 1 && tmp > 1) {
+ curcol += width + 1;
+ if (basecol >= db_max_width ||
+ curcol + width >= db_max_width) {
+ /* new line */
+ db_printf("\n");
+ if (basecol + width >=
+ db_max_width) {
+ db_printf("\t");
+ curcol = 8;
+ } else {
+ db_printf("%*s",
+ basecol, "");
+ curcol = basecol;
+ }
+ } else
+ db_printf(" ");
+ }
+ }
+ }
+ }
+
+ db_printf("\n");
+}
+
+
+/*
+ * show offset <value>: displays the list of struct fields which exist
+ * at that particular offset from the beginning of the struct.
+ */
+void
+db_struct_offset_cmd(db_expr_t addr, int have_addr, db_expr_t count,
+ char *modifiers)
+{
+ db_expr_t offset = 0;
+ const struct ddb_field_offsets *field;
+ const uint *fidx;
+ uint oidx;
+ int width;
+ char tmpfmt[28];
+
+ /*
+ * Read the offset from the debuggger input.
+ * We don't want to get it from the standard parsing code, because
+ * this would set `dot' to this value, which doesn't make sense.
+ */
+
+ if (!db_expression(&offset) || offset < 0) {
+ db_printf("not a valid offset\n");
+ db_flush_lex();
+ return;
+ }
+
+ db_skip_to_eol();
+
+ for (field = ddb_field_offsets, oidx = 0; oidx < NOFFS; field++, oidx++)
+ if (field->offs == (size_t)offset)
+ break;
+
+ if (oidx == NOFFS) {
+ db_format(tmpfmt, sizeof tmpfmt, (long)offset,
+ DB_FORMAT_N, 0, width);
+ db_printf("no known structure element at offset %-*s\n",
+ width, tmpfmt);
+ db_flush_lex();
+ return;
+ }
+
+ db_printf("%-30s %-30s size\n", "struct", "member");
+ for (fidx = field->list; *fidx != 0; fidx++)
+ db_struct_print_field(*fidx, DBSP_STRUCT_NAME, 0);
+}
+
+/*
+ * show struct <struct name> [addr]: displays the data starting at addr
+ * (`dot' if unspecified) as a struct of the given type.
+ */
+void
+db_struct_layout_cmd(db_expr_t addr, int have_addr, db_expr_t count,
+ char *modifiers)
+{
+ const struct ddb_struct_info *struc;
+ uint sidx, fidx;
+ int t;
+
+ /*
+ * Read the struct name from the debugger input.
+ */
+
+ t = db_read_token();
+ if (t != tIDENT) {
+ db_printf("Bad struct name\n");
+ db_flush_lex();
+ return;
+ }
+
+ for (struc = ddb_struct_info, sidx = 0; sidx < NSTRUCT;
+ struc++, sidx++)
+ if (strcmp(struc->name, db_tok_string) == 0)
+ break;
+
+ if (sidx == NSTRUCT) {
+ db_printf("unknown struct %s\n", db_tok_string);
+ db_flush_lex();
+ return;
+ }
+
+ /*
+ * Read the address, if any, from the debugger input.
+ * In that case, update `dot' value.
+ */
+
+ if (db_expression(&addr)) {
+ db_dot = (db_addr_t)addr;
+ db_last_addr = db_dot;
+ } else
+ addr = (db_expr_t)db_dot;
+
+ db_skip_to_eol();
+
+ /*
+ * Display the structure contents.
+ */
+
+ db_printf("struct %s at %p (%zu bytes)\n", struc->name, (vaddr_t)addr,
+ struc->size);
+ for (fidx = struc->fmin; fidx <= struc->fmax; fidx++)
+ db_struct_print_field(fidx, DBSP_VALUE, addr);
+}
diff --git a/sys/ddb/db_structinfo.c b/sys/ddb/db_structinfo.c
new file mode 100644
index 00000000000..6fd189c31fb
--- /dev/null
+++ b/sys/ddb/db_structinfo.c
@@ -0,0 +1,122 @@
+/* $OpenBSD: db_structinfo.c,v 1.1 2009/08/09 23:04:49 miod Exp $ */
+/* public domain */
+/*
+ * This file is intended to be compiled with debug information,
+ * which is then translated by parse_debug.awk into support data
+ * for ddb.
+ */
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/cdefs.h>
+
+#include <sys/device.h>
+#include <sys/user.h>
+#include <sys/proc.h>
+#include <sys/acct.h>
+#include <sys/buf.h>
+#include <sys/conf.h>
+#include <sys/core.h>
+#include <sys/disk.h>
+#include <sys/disklabel.h>
+#include <sys/dirent.h>
+#include <sys/dkbad.h>
+#include <sys/dkstat.h>
+#include <sys/evcount.h>
+#include <sys/event.h>
+#include <sys/eventvar.h>
+#include <sys/exec.h>
+#include <sys/extent.h>
+#include <sys/fcntl.h>
+#include <sys/file.h>
+#include <sys/filedesc.h>
+#include <sys/gpio.h>
+#include <sys/hash.h>
+#include <sys/hotplug.h>
+#include <sys/ipc.h>
+#include <sys/kcore.h>
+#include <sys/kthread.h>
+#include <sys/ktrace.h>
+#include <sys/localedef.h>
+#include <sys/lock.h>
+#include <sys/lockf.h>
+#include <sys/malloc.h>
+#include <sys/mbuf.h>
+#include <sys/memrange.h>
+#include <sys/mman.h>
+#include <sys/mount.h>
+#include <sys/msg.h>
+#include <sys/msgbuf.h>
+#include <sys/namei.h>
+#include <sys/pipe.h>
+#include <sys/pool.h>
+#include <sys/protosw.h>
+#include <sys/ptrace.h>
+#include <sys/queue.h>
+#include <sys/resource.h>
+#include <sys/resourcevar.h>
+#include <sys/rwlock.h>
+#include <sys/sched.h>
+#include <sys/select.h>
+#include <sys/selinfo.h>
+#include <sys/sem.h>
+#include <sys/sensors.h>
+#include <sys/shm.h>
+#include <sys/siginfo.h>
+#include <sys/signal.h>
+#include <sys/signalvar.h>
+#include <sys/socket.h>
+#include <sys/socketvar.h>
+#include <sys/stat.h>
+#include <sys/statvfs.h>
+#include <sys/swap.h>
+#include <sys/syscall.h>
+#include <sys/syscallargs.h>
+#include <sys/sysctl.h>
+#include <sys/syslog.h>
+#include <sys/termios.h>
+#include <sys/time.h>
+#include <sys/timeb.h>
+#include <sys/timeout.h>
+#include <sys/times.h>
+#include <sys/timetc.h>
+#include <sys/tprintf.h>
+#include <sys/tree.h>
+#include <sys/tty.h>
+#include <sys/ttydev.h>
+#include <sys/ucred.h>
+#include <sys/uio.h>
+#include <sys/un.h>
+#include <sys/unpcb.h>
+#include <sys/utsname.h>
+#include <sys/vmmeter.h>
+#include <sys/vnode.h>
+#include <sys/wait.h>
+#include <sys/workq.h>
+
+#include <machine/cpu.h>
+#include <machine/conf.h>
+#include <machine/mutex.h>
+
+#include <uvm/uvm.h>
+
+/* XXX add filesystem includes there */
+
+#include <sys/agpio.h>
+#include <sys/ataio.h>
+#include <sys/audioio.h>
+#include <sys/cdio.h>
+#include <sys/chio.h>
+#include <sys/dkio.h>
+#include <sys/midiio.h>
+#include <sys/filio.h>
+#include <sys/mtio.h>
+#include <sys/pciio.h>
+#include <sys/radioio.h>
+#include <sys/scanio.h>
+#include <sys/scsiio.h>
+#include <sys/sockio.h>
+/* videoio.h uses anonymous unions which gcc2 doesn't support */
+#if (defined(__GNUC__) && __GNUC__ >= 3) || defined(__PCC__)
+#include <sys/videoio.h>
+#endif
diff --git a/sys/ddb/parse_structinfo.awk b/sys/ddb/parse_structinfo.awk
new file mode 100644
index 00000000000..b4e03b20252
--- /dev/null
+++ b/sys/ddb/parse_structinfo.awk
@@ -0,0 +1,318 @@
+# $OpenBSD: parse_structinfo.awk,v 1.1 2009/08/09 23:04:49 miod Exp $
+#
+# Copyright (c) 2009 Miodrag Vallat.
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+
+# This ugly script parses the output of objdump -g in order to extract
+# structure layout information, to be used by ddb.
+#
+# The output of this script is the following static data:
+# - for each struct:
+# - its name
+# - its size (individual element size if an array)
+# - the number of elements in the array (1 if not)
+# - its first and last field indexes
+# - for each field:
+# - its name
+# - its offset and size
+# - the index of the struct it is member of
+# This allows fast struct -> field information retrieval.
+#
+# To retrieve information from a field size or offset, we also output
+# the following reverse arrays:
+# - for each offset, in ascending order, a variable length list of field
+# indexes.
+# - for each size, in ascending order, a variable length list of field
+# indexes.
+#
+# The compromise here is that I want to minimize linear searches. Memory
+# use is considered secondary, hence the back `pointer' to the struct in the
+# fields array.
+#
+# No attempt is made to share name pointers when multiple fields share
+# the same name. Rewriting this script in perl, or any other language
+# with hash data structures, would be a good time to add this.
+
+BEGIN {
+ depth = 0;
+ ignore = 0;
+ scnt = 0; # current struct count
+ sidx = -1; # current struct index
+ # field index #0 is used as a sentinel.
+ fcnt = 1; # current field count
+ fidx = 0; # current field index
+ ocnt = 0; # current offset count
+ zcnt = 0; # current size count
+
+}
+/^struct / {
+ depth = 1;
+ sidx = scnt;
+ sname[sidx] = $2;
+ ssize[sidx] = $6;
+ sfieldmin[sidx] = fcnt;
+ scnt++;
+ #printf("struct %d %s (size %d)\n", sidx, $2, $6);
+ next;
+}
+/^};/ {
+ if (depth != 0) {
+ depth = 0;
+ if (fcnt == sfieldmin[sidx]) # empty struct, ignore it
+ scnt--;
+ else
+ sfieldmax[sidx] = fidx;
+ } else
+ ignore--;
+ next;
+}
+/{.*}/ {
+ # single line enum
+ next;
+}
+/{/ {
+ # subcomponent
+ if (depth != 0) {
+ depth++;
+ } else {
+ ignore++;
+ }
+ next;
+}
+/}/ {
+ if (ignore != 0) {
+ ignore--;
+ next;
+ } else {
+ depth--;
+ }
+ if (depth != 1)
+ next;
+ # FALLTHROUGH
+}
+/bitsize/ {
+ if (ignore != 0)
+ next;
+ if (depth != 1)
+ next;
+
+ # Bitfields are a PITA... From a ddb point of view, we can't really
+ # access storage units smaller than a byte.
+ # So we'll report all bitfields as having size 0, and the
+ # rounded down byte position where they start.
+ cursize = int($(NF - 3));
+ curoffs = int($(NF - 1) / 8);
+ if ((cursize % 8) != 0)
+ cursize = 0;
+ else
+ cursize /= 8;
+
+ # try and gather the field name.
+ field = $(NF - 6);
+ if (field == "};") {
+ # anonymous union. discard it.
+ next;
+ }
+ if (field == "*/);") {
+ field = $(NF - 9); # function pointer
+ # remove enclosing braces
+ field = substr(field, 2, length(field) - 2);
+ }
+ colon = index(field, ":");
+ if (colon != 0)
+ field = substr(field, 1, colon - 1);
+ else if (substr(field, length(field), 1) == ";")
+ field = substr(field, 1, length(field) - 1);
+
+ while (index(field, "*") == 1)
+ field = substr(field, 2);
+
+ # This could be an array. If it is, we need to trim the field
+ # name and update its size to a single member size.
+ obracket = index(field, "[");
+ cbracket = index(field, "]");
+ if (obracket != 0) {
+ obracket++;
+ nitems = substr(field, obracket, cbracket - obracket);
+ field = substr(field, 1, obracket - 2);
+ cursize /= nitems;
+ } else
+ nitems = 1;
+
+ fidx = fcnt;
+ fname[fidx] = field;
+ foffs[fidx] = curoffs;
+ fsize[fidx] = cursize;
+ fitems[fidx] = nitems;
+ fstruct[fidx] = sidx;
+ fcnt++;
+ #printf(" %s at %d len %d\n", field, curoffs, cursize);
+
+ # Remember size and offset if not found yet
+
+ for (i = 0; i < ocnt; i++)
+ if (offs[i] == curoffs)
+ break;
+ if (i == ocnt) {
+ # keep array sorted
+ for (i = 0; i < ocnt; i++)
+ if (offs[i] > curoffs)
+ break;
+ if (i < ocnt) {
+ for (j = ocnt + 1; j > i; j--)
+ offs[j] = offs[j - 1];
+ }
+ offs[i] = curoffs;
+ ocnt++;
+ }
+
+ for (i = 0; i < zcnt; i++)
+ if (sizes[i] == cursize)
+ break;
+ if (i == zcnt) {
+ # keep array sorted
+ for (i = 0; i < zcnt; i++)
+ if (sizes[i] > cursize)
+ break;
+ if (i < zcnt) {
+ for (j = zcnt + 1; j > i; j--)
+ sizes[j] = sizes[j - 1];
+ }
+ sizes[i] = cursize;
+ zcnt++;
+ }
+}
+END {
+ printf("/*\n");
+ printf(" * THIS IS A GENERATED FILE. DO NOT EDIT!\n");
+ printf(" */\n\n");
+
+ printf("#include <sys/param.h>\n");
+ printf("#include <sys/types.h>\n");
+ printf("\n");
+
+ # structure definitions
+
+ printf("struct ddb_struct_info {\n");
+ printf("\tconst char *name;\n");
+ printf("\tsize_t size;\n");
+ printf("\tuint fmin, fmax;\n");
+ printf("};\n");
+
+ printf("struct ddb_field_info {\n");
+ printf("\tconst char *name;\n");
+ printf("\tuint sidx;\n");
+ printf("\tsize_t offs;\n");
+ printf("\tsize_t size;\n");
+ printf("\tuint nitems;\n");
+ printf("};\n");
+
+ printf("struct ddb_field_offsets {\n");
+ printf("\tsize_t offs;\n");
+ printf("\tconst uint *list;\n");
+ printf("};\n");
+
+ printf("struct ddb_field_sizes {\n");
+ printf("\tsize_t size;\n");
+ printf("\tconst uint *list;\n");
+ printf("};\n");
+
+ # forward arrays
+
+ printf("#define NSTRUCT %d\n", scnt);
+ printf("static const struct ddb_struct_info ddb_struct_info[NSTRUCT] = {\n");
+ for (i = 0; i < scnt; i++) {
+ printf("\t{ \"%s\", %d, %d, %d },\n",
+ sname[i], ssize[i], sfieldmin[i], sfieldmax[i]);
+ }
+ printf("};\n\n");
+
+ printf("#define NFIELD %d\n", fcnt);
+ printf("static const struct ddb_field_info ddb_field_info[NFIELD] = {\n");
+ printf("\t{ NULL, 0, 0, 0 },\n");
+ for (i = 1; i < fcnt; i++) {
+ printf("\t{ \"%s\", %d, %d, %d, %d },\n",
+ fname[i], fstruct[i], foffs[i], fsize[i], fitems[i]);
+ }
+ printf("};\n\n");
+
+ # reverse arrays
+
+ printf("static const uint ddb_fields_by_offset[] = {\n");
+ w = 0;
+ for (i = 0; i < ocnt; i++) {
+ cmp = offs[i];
+ ohead[i] = w;
+ for (f = 1; f < fcnt; f++)
+ if (foffs[f] == cmp) {
+ if ((w % 10) == 0)
+ printf("\t");
+ printf("%d, ", f);
+ w++;
+ if ((w % 10) == 0)
+ printf("\n");
+ }
+ if ((w % 10) == 0)
+ printf("\t");
+ printf("0, ");
+ w++;
+ if ((w % 10) == 0)
+ printf("\n");
+ }
+ if ((w % 10) != 0)
+ printf("\n");
+ printf("};\n\n");
+
+ printf("#define NOFFS %d\n", ocnt);
+ printf("static const struct ddb_field_offsets ddb_field_offsets[NOFFS] = {\n");
+ for (i = 0; i < ocnt; i++) {
+ printf("\t{ %d, ddb_fields_by_offset + %d },\n",
+ offs[i], ohead[i]);
+ }
+ printf("};\n\n");
+
+ printf("static const uint ddb_fields_by_size[] = {\n");
+ w = 0;
+ for (i = 0; i < zcnt; i++) {
+ cmp = sizes[i];
+ zhead[i] = w;
+ for (f = 1; f < fcnt; f++)
+ if (fsize[f] == cmp) {
+ if ((w % 10) == 0)
+ printf("\t");
+ printf("%d, ", f);
+ w++;
+ if ((w % 10) == 0)
+ printf("\n");
+ }
+ if ((w % 10) == 0)
+ printf("\t");
+ printf("0, ");
+ w++;
+ if ((w % 10) == 0)
+ printf("\n");
+ }
+ if ((w % 10) != 0)
+ printf("\n");
+ printf("};\n\n");
+
+ printf("#define NSIZES %d\n", zcnt);
+ printf("static const struct ddb_field_sizes ddb_field_sizes[NSIZES] = {\n");
+ for (i = 0; i < zcnt; i++) {
+ printf("\t{ %d, ddb_fields_by_size + %d },\n",
+ sizes[i], zhead[i]);
+ }
+ printf("};\n");
+}