forked from pool/kexec-tools
66 lines
1.5 KiB
Bash
66 lines
1.5 KiB
Bash
#!/bin/sh
|
|
#
|
|
# Start gdb for kdump crash analysis
|
|
#
|
|
# Usage: gdb-kdump [-v vmlinux] [vmcore [gdb options...]]
|
|
#
|
|
# The script starts gdb using the currently running kernel image
|
|
# and the appopriate crash dump file. If the kernel image is
|
|
# compressed, it's decompressed automatically.
|
|
#
|
|
# When no arugment is given, the latest crash dump file is probed.
|
|
#
|
|
# The script also passes the gdb macros useful for analysis of crash
|
|
# dump.
|
|
|
|
. /etc/sysconfig/kdump
|
|
|
|
bootdir="/boot"
|
|
|
|
if [ "$1" = "-v" ]; then
|
|
vmlinux="$2"
|
|
if [ ! -f "$vmlinux" ]; then
|
|
echo "Cannot find vmlinux file $vmlinux, aborting"
|
|
exit 1
|
|
fi
|
|
shift 2
|
|
else
|
|
vmlinux="$bootdir"/vmlinux-`uname -r`
|
|
if [ ! -f $vmlinux ]; then
|
|
if [ -f "$bootdir/vmlinux" ]; then
|
|
vmlinux="$bootdir/vmlinux"
|
|
elif [ -f $vmlinux.gz ]; then
|
|
if gunzip $vmlinux.gz; then
|
|
echo "Uncompressed $vmlinux.gz"
|
|
else
|
|
echo "Cannot uncompress $vmlinux.gz, aborting"
|
|
exit 1
|
|
fi
|
|
else
|
|
echo "No useful vmlinux is found in $bootdir"
|
|
exit 1
|
|
fi
|
|
fi
|
|
fi
|
|
echo "Using $vmlinux as vmlinux"
|
|
|
|
if [ -n "$1" ]; then
|
|
if [ -f "$1" ]; then
|
|
dumpfile="$1"
|
|
shift
|
|
else
|
|
echo "Dumpfile $1 cannot be found"
|
|
exit 1
|
|
fi
|
|
else
|
|
dumpfile=`ls $KDUMP_SAVEDIR/*-*-*-*:*/vmcore 2>/dev/null | sort -r | head -n 1`
|
|
if [ -n "$dumpfile" -a -f "$dumpfile" ]; then
|
|
echo "Using $dumpfile as dumpfile"
|
|
else
|
|
echo "Cannot find the latest dumpfile"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
exec /usr/bin/gdb --command=/usr/share/gdbinit.kdump $vmlinux $dumpfile $*
|