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
This commit is contained in:
John Baldwin 2017-04-25 18:08:56 +00:00
parent b3ac6549ca
commit 73ad3fb536
7 changed files with 59 additions and 12 deletions

View file

@ -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>

View file

@ -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"

View file

@ -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"

View file

@ -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.1.gz
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

View file

@ -0,0 +1,5 @@
.\" $FreeBSD$
Set to install
.Xr gdb 1
into
.Pa /usr/bin .

View file

@ -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.

View file

@ -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