Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 27 Jul 2016 17:55:40 +0000 (UTC)
From:      John Baldwin <jhb@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r303403 - in stable: 10/usr.sbin/crashinfo 9/usr.sbin/crashinfo
Message-ID:  <201607271755.u6RHtekp030589@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jhb
Date: Wed Jul 27 17:55:40 2016
New Revision: 303403
URL: https://svnweb.freebsd.org/changeset/base/303403

Log:
  MFC 303109: Update crashinfo to work with newer gdb from ports.
  
  If gdb from ports is installed, use it instead of the base system gdb
  to extract variables from a kernel.  Note that base gdb and ports gdb
  do not support the same options for invoking a single command in batch
  mode, so a wrapper shell function is used.  In addition, prefer kgdb
  from ports when generating a backtrace if present.
  
  PR:		193335

Modified:
  stable/10/usr.sbin/crashinfo/crashinfo.sh
Directory Properties:
  stable/10/   (props changed)

Changes in other areas also in this revision:
Modified:
  stable/9/usr.sbin/crashinfo/crashinfo.sh
Directory Properties:
  stable/9/usr.sbin/crashinfo/   (props changed)

Modified: stable/10/usr.sbin/crashinfo/crashinfo.sh
==============================================================================
--- stable/10/usr.sbin/crashinfo/crashinfo.sh	Wed Jul 27 17:55:14 2016	(r303402)
+++ stable/10/usr.sbin/crashinfo/crashinfo.sh	Wed Jul 27 17:55:40 2016	(r303403)
@@ -35,6 +35,22 @@ usage()
 	exit 1
 }
 
+# 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.
+gdb_command()
+{
+	local k
+
+	k=$1 ; shift
+
+	if [ -x /usr/local/bin/gdb ]; then
+		/usr/local/bin/gdb -batch -ex "$@" $k
+	else
+		echo -e "$@" | /usr/bin/gdb -x /dev/stdin -batch $k
+	fi
+}
+
 find_kernel()
 {
 	local ivers k kvers
@@ -55,8 +71,8 @@ find_kernel()
 
 	# Look for a matching kernel version.
 	for k in `sysctl -n kern.bootfile` $(ls -t /boot/*/kernel); do
-		kvers=$(echo 'printf "  Version String: %s", version' | \
-		    gdb -x /dev/stdin -batch $k 2>/dev/null)
+		kvers=$(gdb_command $k 'printf "  Version String: %s", version' \
+		     2>/dev/null)
 		if [ "$ivers" = "$kvers" ]; then
 			KERNEL=$k
 			break
@@ -151,11 +167,10 @@ echo "Writing crash summary to $FILE."
 umask 077
 
 # Simulate uname
-ostype=$(echo -e printf '"%s", ostype' | gdb -x /dev/stdin -batch $KERNEL)
-osrelease=$(echo -e printf '"%s", osrelease' | gdb -x /dev/stdin -batch $KERNEL)
-version=$(echo -e printf '"%s", version' | gdb -x /dev/stdin -batch $KERNEL | \
-    tr '\t\n' '  ')
-machine=$(echo -e printf '"%s", machine' | gdb -x /dev/stdin -batch $KERNEL)
+ostype=$(gdb_command $KERNEL 'printf "%s", ostype')
+osrelease=$(gdb_command $KERNEL 'printf "%s", osrelease')
+version=$(gdb_command $KERNEL 'printf "%s", version' | tr '\t\n' '  ')
+machine=$(gdb_command $KERNEL 'printf "%s", machine')
 
 exec > $FILE 2>&1
 
@@ -174,7 +189,11 @@ file=`mktemp /tmp/crashinfo.XXXXXX`
 if [ $? -eq 0 ]; then
 	echo "bt" >> $file
 	echo "quit" >> $file
-	kgdb $KERNEL $VMCORE < $file
+	if [ -x /usr/local/bin/kgdb ]; then
+		/usr/local/bin/kgdb $KERNEL $VMCORE < $file
+	else
+		kgdb $KERNEL $VMCORE < $file
+	fi
 	rm -f $file
 	echo
 fi



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201607271755.u6RHtekp030589>