svn commit: r317416 - in head: gnu/usr.bin/gdb share/mk tools/build/mk tools/build/options usr.sbin/crashinfo

John Baldwin jhb at FreeBSD.org
Tue Apr 25 18:08:58 UTC 2017


Author: jhb
Date: Tue Apr 25 18:08:56 2017
New Revision: 317416
URL: https://svnweb.freebsd.org/changeset/base/317416

Log:
  Add a new GDB_LIBEXEC option to install gdb and kgdb to /usr/libexec.
  
  When this option is enabled, only gdb and kgdb are installed to
  /usr/libexec for use by crashinfo(8). Other bits of GDB such as
  gdbserver and gdbtui are not installed. For this option to be
  effective, GDB must be enabled.
  
  Rework r317094 to re-enable GDB on all platforms but enable
  GDB_LIBEXEC on platforms for which the GDB in ports is a superset of
  functionality.
  
  Reviewed by:	emaste, kib
  Suggested by:	kib
  Relnotes:	yes
  Differential Revision:	https://reviews.freebsd.org/D10449

Added:
  head/tools/build/options/WITHOUT_GDB_LIBEXEC   (contents, props changed)
  head/tools/build/options/WITH_GDB_LIBEXEC   (contents, props changed)
Modified:
  head/gnu/usr.bin/gdb/Makefile
  head/gnu/usr.bin/gdb/Makefile.inc
  head/share/mk/src.opts.mk
  head/tools/build/mk/OptionalObsoleteFiles.inc
  head/usr.sbin/crashinfo/crashinfo.sh

Modified: head/gnu/usr.bin/gdb/Makefile
==============================================================================
--- head/gnu/usr.bin/gdb/Makefile	Tue Apr 25 18:07:48 2017	(r317415)
+++ head/gnu/usr.bin/gdb/Makefile	Tue Apr 25 18:08:56 2017	(r317416)
@@ -1,9 +1,15 @@
 # $FreeBSD$
 
-SUBDIR=	libgdb gdb gdbtui kgdb
+.include <src.opts.mk>
+
+SUBDIR=	libgdb gdb kgdb
+
+.if ${MK_GDB_LIBEXEC} == "no"
+SUBDIR+= gdbtui
 
 .if exists(${.CURDIR}/gdbserver/reg-${MACHINE_CPUARCH}.c)
 SUBDIR+=gdbserver
 .endif
+.endif
 
 .include <bsd.subdir.mk>

Modified: head/gnu/usr.bin/gdb/Makefile.inc
==============================================================================
--- head/gnu/usr.bin/gdb/Makefile.inc	Tue Apr 25 18:07:48 2017	(r317415)
+++ head/gnu/usr.bin/gdb/Makefile.inc	Tue Apr 25 18:08:56 2017	(r317416)
@@ -1,5 +1,7 @@
 # $FreeBSD$
 
+.include <src.opts.mk>
+
 VERSION= "6.1.1 [FreeBSD]"
 VENDOR= marcel
 
@@ -53,6 +55,9 @@ GENSRCS+= nm.h tm.h
 CFLAGS+= -DCROSS_DEBUGGER -I${BMAKE_ROOT:H:H}
 GDB_SUFFIX= -${TARGET_ARCH}
 MAN=
+.elif ${MK_GDB_LIBEXEC} != "no"
+BINDIR?=	/usr/libexec
+MAN=
 .endif
 
 .include "${TARGET_SUBDIR}/Makefile"

Modified: head/share/mk/src.opts.mk
==============================================================================
--- head/share/mk/src.opts.mk	Tue Apr 25 18:07:48 2017	(r317415)
+++ head/share/mk/src.opts.mk	Tue Apr 25 18:08:56 2017	(r317416)
@@ -97,6 +97,7 @@ __DEFAULT_YES_OPTIONS = \
     FTP \
     GAMES \
     GCOV \
+    GDB \
     GNU_DIFF \
     GNU_GREP \
     GPIO \
@@ -267,9 +268,9 @@ BROKEN_OPTIONS+=LLDB
 # does not yet contain kernel support for arm, and sparc64 kernel support
 # has not been tested.
 .if ${__T:Marm*} != "" || ${__T} == "sparc64"
-__DEFAULT_YES_OPTIONS+=GDB
+__DEFAULT_NO_OPTIONS+=GDB_LIBEXEC
 .else
-__DEFAULT_NO_OPTIONS+=GDB
+__DEFAULT_YES_OPTIONS+=GDB_LIBEXEC
 .endif
 # Only doing soft float API stuff on armv6
 .if ${__T} != "armv6"

Modified: head/tools/build/mk/OptionalObsoleteFiles.inc
==============================================================================
--- head/tools/build/mk/OptionalObsoleteFiles.inc	Tue Apr 25 18:07:48 2017	(r317415)
+++ head/tools/build/mk/OptionalObsoleteFiles.inc	Tue Apr 25 18:08:56 2017	(r317416)
@@ -2431,7 +2431,7 @@ OLD_FILES+=usr/bin/gcov
 OLD_FILES+=usr/share/man/man1/gcov.1.gz
 .endif
 
-.if ${MK_GDB} == no
+.if ${MK_GDB} == no || ${MK_GDB_LIBEXEC} == yes
 OLD_FILES+=usr/bin/gdb
 OLD_FILES+=usr/bin/gdbserver
 OLD_FILES+=usr/bin/gdbtui
@@ -2441,6 +2441,11 @@ OLD_FILES+=usr/share/man/man1/gdbserver.
 OLD_FILES+=usr/share/man/man1/kgdb.1.gz
 .endif
 
+.if ${MK_GDB} == no || ${MK_GDB_LIBEXEC} == no
+OLD_FILES+=usr/libexec/gdb
+OLD_FILES+=usr/libexec/kgdb
+.endif
+
 .if ${MK_GPIO} == no
 OLD_FILES+=usr/include/libgpio.h
 OLD_FILES+=usr/lib/libgpio.a

Added: head/tools/build/options/WITHOUT_GDB_LIBEXEC
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/tools/build/options/WITHOUT_GDB_LIBEXEC	Tue Apr 25 18:08:56 2017	(r317416)
@@ -0,0 +1,5 @@
+.\" $FreeBSD$
+Set to install
+.Xr gdb 1
+into
+.Pa /usr/bin .

Added: head/tools/build/options/WITH_GDB_LIBEXEC
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/tools/build/options/WITH_GDB_LIBEXEC	Tue Apr 25 18:08:56 2017	(r317416)
@@ -0,0 +1,10 @@
+.\" $FreeBSD$
+Set to install
+.Xr gdb 1
+into
+.Pa /usr/libexec .
+This permits
+.Xr gdb 1
+to be used as a fallback for
+.Xr crashinfo 8
+if a newer version is not installed.

Modified: head/usr.sbin/crashinfo/crashinfo.sh
==============================================================================
--- head/usr.sbin/crashinfo/crashinfo.sh	Tue Apr 25 18:07:48 2017	(r317415)
+++ head/usr.sbin/crashinfo/crashinfo.sh	Tue Apr 25 18:08:56 2017	(r317416)
@@ -35,6 +35,19 @@ usage()
 	exit 1
 }
 
+# Find a gdb binary to use and save the value in GDB.
+find_gdb()
+{
+	local binary
+
+	for binary in /usr/local/bin/gdb /usr/libexec/gdb /usr/bin/gdb; do
+		if [ -x ${binary} ]; then
+			GDB=${binary}
+			return
+		fi
+	done
+}
+
 # Run a single gdb command against a kernel file in batch mode.
 # The kernel file is specified as the first argument and the command
 # is given in the remaining arguments.
@@ -44,10 +57,10 @@ gdb_command()
 
 	k=$1 ; shift
 
-	if [ -x /usr/local/bin/gdb ]; then
-		/usr/local/bin/gdb -batch -ex "$@" $k
+	if [ ${GDB} = /usr/local/bin/gdb ]; then
+		${GDB} -batch -ex "$@" $k
 	else
-		echo -e "$@" | /usr/bin/gdb -x /dev/stdin -batch $k
+		echo -e "$@" | ${GDB} -x /dev/stdin -batch $k
 	fi
 }
 
@@ -140,6 +153,12 @@ INFO=$CRASHDIR/info.$DUMPNR
 FILE=$CRASHDIR/core.txt.$DUMPNR
 HOSTNAME=`hostname`
 
+find_gdb
+if [ -z "$GDB" ]; then
+	echo "Unable to find a kernel debugger."
+	exit 1
+fi
+
 if [ ! -e $VMCORE ]; then
 	echo "$VMCORE not found"
 	exit 1
@@ -189,11 +208,7 @@ file=`mktemp /tmp/crashinfo.XXXXXX`
 if [ $? -eq 0 ]; then
 	echo "bt" >> $file
 	echo "quit" >> $file
-	if [ -x /usr/local/bin/kgdb ]; then
-		/usr/local/bin/kgdb $KERNEL $VMCORE < $file
-	else
-		kgdb $KERNEL $VMCORE < $file
-	fi
+	${GDB%gdb}kgdb $KERNEL $VMCORE < $file
 	rm -f $file
 	echo
 fi


More information about the svn-src-all mailing list