Implement "-a" command line option for gcore

With the new "-a" command line option, the user may request gcore to
actually dump all present memory mappings. The actual effect of this
argument is OS dependent.

On GNU/Linux, it will disable use-coredump-filter and enable
dump-excluded-mappings.

gdb/ChangeLog:
2017-11-29  Sergio Lopez  <slp@redhat.com>

	* gcore.in: Add "-a" command line option for instructing gdb to
	dump all memory mappings (OS dependent).
This commit is contained in:
Sergio Lopez 2017-12-04 09:17:14 +01:00 committed by Sergio Durigan Junior
parent 1e52e8495a
commit cd93789b89
1 changed files with 30 additions and 17 deletions

View File

@ -20,27 +20,39 @@
# It starts up gdb, attaches to the given PID and invokes the gcore command.
#
if [ "$#" -eq "0" ]
then
echo "usage: @GCORE_TRANSFORM_NAME@ [-o filename] pid"
exit 2
fi
# Need to check for -o option, but set default basename to "core".
name=core
if [ "$1" = "-o" ]
then
if [ "$#" -lt "3" ]
then
# Not enough arguments.
echo "usage: @GCORE_TRANSFORM_NAME@ [-o filename] pid"
exit 2
fi
name=$2
# When the -a option is present, this may hold additional commands
# to ensure gdb dumps all mappings (OS dependent).
dump_all_cmds=()
# Shift over to start of pid list
shift; shift
while getopts :ao: opt; do
case $opt in
a)
case $OSTYPE in
linux*)
dump_all_cmds=("-ex" "set use-coredump-filter off")
dump_all_cmds+=("-ex" "set dump-excluded-mappings on")
;;
esac
;;
o)
name=$OPTARG
;;
*)
echo "usage: @GCORE_TRANSFORM_NAME@ [-a] [-o filename] pid"
exit 2
;;
esac
done
shift $((OPTIND-1))
if [ "$#" -eq "0" ]
then
echo "usage: @GCORE_TRANSFORM_NAME@ [-a] [-o filename] pid"
exit 2
fi
# Attempt to fetch the absolute path to the gcore script that was
@ -87,6 +99,7 @@ do
# available but not accessible as GDB would get stopped on SIGTTIN.
$binary_path/@GDB_TRANSFORM_NAME@ </dev/null --nx --batch \
-ex "set pagination off" -ex "set height 0" -ex "set width 0" \
"${dump_all_cmds[@]}" \
-ex "attach $pid" -ex "gcore $name.$pid" -ex detach -ex quit
if [ -r $name.$pid ] ; then