diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2017-10-14 12:58:40 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2017-10-14 12:58:55 -0700 |
commit | a4777c46af89649f2282c1703e8117ccd058d719 (patch) | |
tree | a0107581a3d888f9a230e682b126fdc346d0b0f7 /gmon/tst-gmon-static-gprof.sh | |
parent | bc3821bb3b19646311d36c82a13b4ce5afea3508 (diff) | |
download | glibc-a4777c46af89649f2282c1703e8117ccd058d719.tar.gz glibc-a4777c46af89649f2282c1703e8117ccd058d719.tar.xz glibc-a4777c46af89649f2282c1703e8117ccd058d719.zip |
Add a test for profiling static executable
The function, main, is added to profiling output of static executable which must link against gcrt1.o. * Makeconfig (+link-static-before-libc): Use the first of $(CRT-$(@F)) and $(csu-objpfx)$(static-start-installed-name). * gmon/Makefile (tests): Add tst-gmon-static. (tests-static): Likewise. (CFLAGS-tst-gmon-static.c): New. (CRT-tst-gmon-static): Likewise. (DEFAULT-LDFLAGS-tst-gmon-static): Likewise. (tst-gmon-static-ENV): Likewise. (tests-special): Likewise. ($(objpfx)tst-gmon-static.out): Likewise. (clean-tst-gmon-static-data): Likewise. ($(objpfx)tst-gmon-static-gprof.out): Likewise. * gmon/tst-gmon-static-gprof.sh: New file. * gmon/tst-gmon-static.c: Likewise.
Diffstat (limited to 'gmon/tst-gmon-static-gprof.sh')
-rw-r--r-- | gmon/tst-gmon-static-gprof.sh | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/gmon/tst-gmon-static-gprof.sh b/gmon/tst-gmon-static-gprof.sh new file mode 100644 index 0000000000..55ac8aa69f --- /dev/null +++ b/gmon/tst-gmon-static-gprof.sh @@ -0,0 +1,62 @@ +#!/bin/sh +# Check the output of gprof against a carfully crafted static 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 +main 1 +EOF + +# Special version for powerpc with function descriptors. +cat > "$expected_dot" <<EOF +.f1 2000 +.f2 1000 +.main 1 +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 |