-#!/bin/sh
+#!/usr/bin/env bash
-# Copyright (C) 2003-2018 Free Software Foundation, Inc.
+# Copyright (C) 2003-2020 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
#
# Need to check for -o option, but set default basename to "core".
-name=core
+prefix=core
# When the -a option is present, this may hold additional commands
# to ensure gdb dumps all mappings (OS dependent).
dump_all_cmds=()
while getopts :ao: opt; do
- case $opt in
+ case "$opt" in
a)
- case $OSTYPE in
+ 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
+ prefix=$OPTARG
;;
*)
- echo "usage: @GCORE_TRANSFORM_NAME@ [-a] [-o filename] pid"
+ echo "usage: @GCORE_TRANSFORM_NAME@ [-a] [-o prefix] pid1 [pid2...pidN]"
exit 2
;;
esac
if [ "$#" -eq "0" ]
then
- echo "usage: @GCORE_TRANSFORM_NAME@ [-a] [-o filename] pid"
+ echo "usage: @GCORE_TRANSFORM_NAME@ [-a] [-o prefix] pid1 [pid2...pidN]"
exit 2
fi
# Check if the GDB binary is in the expected path. If not, just
# quit with a message.
-if [ ! -f "$binary_path"/@GDB_TRANSFORM_NAME@ ]; then
+if [ ! -f "$binary_path/@GDB_TRANSFORM_NAME@" ]; then
echo "gcore: GDB binary (${binary_path}/@GDB_TRANSFORM_NAME@) not found"
exit 1
fi
rc=0
# Loop through pids
-for pid in $*
+for pid in "$@"
do
# `</dev/null' to avoid touching interactive terminal if it is
# available but not accessible as GDB would get stopped on SIGTTIN.
- $binary_path/@GDB_TRANSFORM_NAME@ </dev/null --nx --batch \
+ "$binary_path/@GDB_TRANSFORM_NAME@" </dev/null \
+ --nx --batch --readnever \
-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
+ -ex "attach $pid" -ex "gcore $prefix.$pid" -ex detach -ex quit
- if [ -r $name.$pid ] ; then
+ if [ -r "$prefix.$pid" ] ; then
rc=0
else
- echo "@GCORE_TRANSFORM_NAME@: failed to create $name.$pid"
+ echo "@GCORE_TRANSFORM_NAME@: failed to create $prefix.$pid"
rc=1
break
fi