diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2025-03-09 08:30:21 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2025-03-10 06:41:42 -0700 |
commit | 48691f6650bbae30d702faa2fddb666763ee4995 (patch) | |
tree | 5edbedd6a28a67fa84233ab3a07c808cd2672635 | |
parent | ebed0bfecc7f482a2c284947527427625ee42c1a (diff) | |
download | binutils-48691f6650bbae30d702faa2fddb666763ee4995.zip binutils-48691f6650bbae30d702faa2fddb666763ee4995.tar.gz binutils-48691f6650bbae30d702faa2fddb666763ee4995.tar.bz2 |
gprof: Add a simple test for gprof -l
Verify that "gprof -l" works properly.
* testsuite/Makefile.am (check_SCRIPTS): Add tst-gmon-gprof-l.sh.
* testsuite/Makefile.in: Regenerated.
* testsuite/tst-gmon-gprof-l.sh: New.
Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
-rw-r--r-- | gprof/testsuite/Makefile.am | 5 | ||||
-rw-r--r-- | gprof/testsuite/Makefile.in | 13 | ||||
-rwxr-xr-x | gprof/testsuite/tst-gmon-gprof-l.sh | 74 |
3 files changed, 90 insertions, 2 deletions
diff --git a/gprof/testsuite/Makefile.am b/gprof/testsuite/Makefile.am index 6a3eb72..c4d6c41 100644 --- a/gprof/testsuite/Makefile.am +++ b/gprof/testsuite/Makefile.am @@ -35,4 +35,9 @@ tst-gmon: tst-gmon.$(OBJEXT) tst-gmon-gprof.out: tst-gmon$(EXEEXT) $(GPROF) $(srcdir)/tst-gmon-gprof.sh $(GPROF) tst-gmon$(EXEEXT) +check_SCRIPTS += tst-gmon-gprof-l.sh +check_DATA += tst-gmon-gprof-l.out +tst-gmon-gprof-l.out: tst-gmon$(EXEEXT) $(GPROF) + $(srcdir)/tst-gmon-gprof-l.sh $(GPROF) tst-gmon$(EXEEXT) + endif NATIVE diff --git a/gprof/testsuite/Makefile.in b/gprof/testsuite/Makefile.in index 3e26c2c..008f6be 100644 --- a/gprof/testsuite/Makefile.in +++ b/gprof/testsuite/Makefile.in @@ -90,8 +90,8 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -@NATIVE_TRUE@am__append_1 = tst-gmon-gprof.sh -@NATIVE_TRUE@am__append_2 = tst-gmon-gprof.out +@NATIVE_TRUE@am__append_1 = tst-gmon-gprof.sh tst-gmon-gprof-l.sh +@NATIVE_TRUE@am__append_2 = tst-gmon-gprof.out tst-gmon-gprof-l.out @NATIVE_TRUE@am__append_3 = tst-gmon.$(OBJEXT) tst-gmon$(EXEEXT) gmon.out subdir = testsuite ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 @@ -705,6 +705,13 @@ tst-gmon-gprof.sh.log: tst-gmon-gprof.sh --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) +tst-gmon-gprof-l.sh.log: tst-gmon-gprof-l.sh + @p='tst-gmon-gprof-l.sh'; \ + b='tst-gmon-gprof-l.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ @@ -879,6 +886,8 @@ uninstall-am: @NATIVE_TRUE@ $(LINK) tst-gmon.$(OBJEXT) @NATIVE_TRUE@tst-gmon-gprof.out: tst-gmon$(EXEEXT) $(GPROF) @NATIVE_TRUE@ $(srcdir)/tst-gmon-gprof.sh $(GPROF) tst-gmon$(EXEEXT) +@NATIVE_TRUE@tst-gmon-gprof-l.out: tst-gmon$(EXEEXT) $(GPROF) +@NATIVE_TRUE@ $(srcdir)/tst-gmon-gprof-l.sh $(GPROF) tst-gmon$(EXEEXT) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/gprof/testsuite/tst-gmon-gprof-l.sh b/gprof/testsuite/tst-gmon-gprof-l.sh new file mode 100755 index 0000000..3e54da6 --- /dev/null +++ b/gprof/testsuite/tst-gmon-gprof-l.sh @@ -0,0 +1,74 @@ +#!/bin/sh +# Check the output of gprof against a carfully crafted binary. +# Copyright (C) 2017-2025 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 +# <https://www.gnu.org/licenses/>. + +GPROF="$1" +if test -z "$GPROF"; then + # Exit 0 for automake test script run. + exit 0 +fi + +program="$2" +# Generate gmon.out +data=gmon.out +rm -f $data +./$program +if test ! -s $data; then + echo "FAIL" + exit 1 +fi + +LC_ALL=C +export LC_ALL +set -e +exec 2>&1 + +actual=${program}.actual +expected=${program}.expected +expected_dot=${program}.expected_dot +cleanup () { + rm -f "$actual" + rm -f "$expected" + rm -f "$expected_dot" +} +trap cleanup 0 + +cat > "$expected" <<EOF +25 f1 2000 +31 f2 1000 +40 f3 1 +EOF + +# Special version for powerpc with function descriptors. +cat > "$expected_dot" <<EOF +25 .f1 2000 +31 .f2 1000 +40 .f3 1 +EOF + +"$GPROF" -l -C "$program" "$data" \ + | awk -F '[(): ]' '/executions/{print $2, $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 |