diff options
author | Florian Weimer <fweimer@redhat.com> | 2017-08-15 15:49:40 +0200 |
---|---|---|
committer | Florian Weimer <fweimer@redhat.com> | 2017-08-15 15:49:45 +0200 |
commit | 6014c65de2ac75ac4ef147754d80c7992f07ece8 (patch) | |
tree | fb1c32b9acf4a86ce341a0ce8eb5923de389d30f /gmon/tst-gmon-gprof.sh | |
parent | ee72219a497b6317c49dc0a9a02308fe408c8c5e (diff) | |
download | glibc-6014c65de2ac75ac4ef147754d80c7992f07ece8.tar.gz |
gmon: Add test for basic mcount/gprof functionality
Diffstat (limited to 'gmon/tst-gmon-gprof.sh')
-rw-r--r-- | gmon/tst-gmon-gprof.sh | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/gmon/tst-gmon-gprof.sh b/gmon/tst-gmon-gprof.sh new file mode 100644 index 0000000000..07887255c0 --- /dev/null +++ b/gmon/tst-gmon-gprof.sh @@ -0,0 +1,60 @@ +#!/bin/sh +# Check the output of gprof against a carfully crafted binary. +# Copyright (C) 2017 Free Software Foundation, Inc. +# This file is part of the GNU C Library. + +# The GNU C Library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. + +# The GNU C Library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. + +# You should have received a copy of the GNU Lesser General Public +# License along with the GNU C Library; if not, see +# <http://www.gnu.org/licenses/>. + +LC_ALL=C +export LC_ALL +set -e +exec 2>&1 + +GPROF="$1" +program="$2" +data="$3" + +actual=$(mktemp) +expected=$(mktemp) +expected_dot=$(mktemp) +cleanup () { + rm -f "$actual" + rm -f "$expected" + rm -f "$expected_dot" +} +trap cleanup 0 + +cat > "$expected" <<EOF +f1 2000 +f2 1000 +EOF + +# Special version for powerpc with function descriptors. +cat > "$expected_dot" <<EOF +.f1 2000 +.f2 1000 +EOF + +"$GPROF" -C "$program" "$data" \ + | awk -F '[(): ]' '/executions/{print $5, $8}' \ + | sort > "$actual" + +if cmp -s "$actual" "$expected_dot" \ + || diff -u --label expected "$expected" --label actual "$actual" ; then + echo "PASS" +else + echo "FAIL" + exit 1 +fi |