[binutils-gdb] gprof: Fix tests on Solaris [PR34237]
Rainer Orth
ro@sourceware.org
Thu Jun 11 08:05:37 GMT 2026
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=c52a3e86835f40dc4048e038f3cec6b97dba69fb
commit c52a3e86835f40dc4048e038f3cec6b97dba69fb
Author: Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
Date: Thu Jun 11 10:05:03 2026 +0200
gprof: Fix tests on Solaris [PR34237]
The gprof tests FAIL on Solaris:
tst-gmon-gprof.sh ../gprof tst-gmon
--- expected
+++ actual
@@ -1,3 +1,4 @@
f1 2000
f2 1000
f3 1
+main 1
FAIL
main is included in the call graph, probably because Solaris still uses
the original BSD gmon.out format.
This patch allows for that difference. To distinguish between targets
with non-default handling, $target is passed to the test scripts.
As detailed in the PR, the powerpc with function descriptors special
case only applies to AIX, so that variant is guarded accordingly.
Tested on amd64-pc-solaris2.11, sparcv9-sun-solaris2.11, and
x86_64-pc-linux-gnu.
2026-06-08 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
gprof:
PR gprof/34237
* testsuite/Makefile.am (tst-gmon-gprof.out): Pass $(target) to
tst-gmon-gprof.sh.
(tst-gmon-gprof-l.out): Likewise.
(tst-gmon-gprof-l2.out): Likewise.
* testsuite/Makefile.in: Regenerate.
* testsuite/tst-gmon-gprof.sh (expected_dot): Remove.
<*-*-solaris2*>: Allow main in execution counters.
<powerpc-*-aix* | rs6000-*-aix*>: Handle function descriptor case here.
* testsuite/tst-gmon-gprof-l.sh: Likewise.
* testsuite/tst-gmon-gprof-l2.sh: Likewise.
Diff:
---
gprof/testsuite/Makefile.am | 6 +++---
gprof/testsuite/Makefile.in | 6 +++---
gprof/testsuite/tst-gmon-gprof-l.sh | 20 ++++++++++++++------
gprof/testsuite/tst-gmon-gprof-l2.sh | 20 ++++++++++++++------
gprof/testsuite/tst-gmon-gprof.sh | 20 ++++++++++++++------
5 files changed, 48 insertions(+), 24 deletions(-)
diff --git a/gprof/testsuite/Makefile.am b/gprof/testsuite/Makefile.am
index 2f8a383a8dd..1eb91ce02d0 100644
--- a/gprof/testsuite/Makefile.am
+++ b/gprof/testsuite/Makefile.am
@@ -33,12 +33,12 @@ tst-gmon.$(OBJEXT): tst-gmon.c
tst-gmon: tst-gmon.$(OBJEXT)
$(LINK) tst-gmon.$(OBJEXT)
tst-gmon-gprof.out: tst-gmon$(EXEEXT) $(GPROF)
- $(srcdir)/tst-gmon-gprof.sh $(GPROF) tst-gmon$(EXEEXT)
+ $(srcdir)/tst-gmon-gprof.sh $(GPROF) tst-gmon$(EXEEXT) $(target)
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)
+ $(srcdir)/tst-gmon-gprof-l.sh $(GPROF) tst-gmon$(EXEEXT) $(target)
# Create a separated-debuginfo version of the initial binary
check_SCRIPTS += tst-gmon-gprof-l2.sh
@@ -49,7 +49,7 @@ tst-gmon2$(EXEEXT) tst-gmon2.debug: tst-gmon$(EXEEXT)
objcopy --add-gnu-debuglink=tst-gmon2.debug tst-gmon2$(EXEEXT)
tst-gmon-gprof-l2.out: tst-gmon2$(EXEEXT) tst-gmon2.debug $(GPROF)
- $(srcdir)/tst-gmon-gprof-l2.sh $(GPROF) tst-gmon2$(EXEEXT)
+ $(srcdir)/tst-gmon-gprof-l2.sh $(GPROF) tst-gmon2$(EXEEXT) $(target)
check_DATA += tst-gmon-gprof-l2.out
MOSTLYCLEANFILES += tst-gmon2$(EXEEXT) tst-gmon2.debug
diff --git a/gprof/testsuite/Makefile.in b/gprof/testsuite/Makefile.in
index 0160e44a8d2..c3ab9089b1c 100644
--- a/gprof/testsuite/Makefile.in
+++ b/gprof/testsuite/Makefile.in
@@ -898,9 +898,9 @@ uninstall-am:
@NATIVE_TRUE@tst-gmon: tst-gmon.$(OBJEXT)
@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@ $(srcdir)/tst-gmon-gprof.sh $(GPROF) tst-gmon$(EXEEXT) $(target)
@NATIVE_TRUE@tst-gmon-gprof-l.out: tst-gmon$(EXEEXT) $(GPROF)
-@NATIVE_TRUE@ $(srcdir)/tst-gmon-gprof-l.sh $(GPROF) tst-gmon$(EXEEXT)
+@NATIVE_TRUE@ $(srcdir)/tst-gmon-gprof-l.sh $(GPROF) tst-gmon$(EXEEXT) $(target)
@NATIVE_TRUE@tst-gmon2$(EXEEXT) tst-gmon2.debug: tst-gmon$(EXEEXT)
@NATIVE_TRUE@ cp -p tst-gmon$(EXEEXT) tst-gmon2$(EXEEXT)
@NATIVE_TRUE@ objcopy --only-keep-debug tst-gmon2$(EXEEXT) tst-gmon2.debug
@@ -908,7 +908,7 @@ uninstall-am:
@NATIVE_TRUE@ objcopy --add-gnu-debuglink=tst-gmon2.debug tst-gmon2$(EXEEXT)
@NATIVE_TRUE@tst-gmon-gprof-l2.out: tst-gmon2$(EXEEXT) tst-gmon2.debug $(GPROF)
-@NATIVE_TRUE@ $(srcdir)/tst-gmon-gprof-l2.sh $(GPROF) tst-gmon2$(EXEEXT)
+@NATIVE_TRUE@ $(srcdir)/tst-gmon-gprof-l2.sh $(GPROF) tst-gmon2$(EXEEXT) $(target)
# Run all tests in series, so they don't fight over the gmon.out file
@NATIVE_TRUE@.NOTPARALLEL:
diff --git a/gprof/testsuite/tst-gmon-gprof-l.sh b/gprof/testsuite/tst-gmon-gprof-l.sh
index d0c26cb62fa..5cb15f43ef7 100755
--- a/gprof/testsuite/tst-gmon-gprof-l.sh
+++ b/gprof/testsuite/tst-gmon-gprof-l.sh
@@ -24,6 +24,7 @@ if test -z "$GPROF"; then
fi
program="$2"
+target="$3"
# Generate gmon.out
data=gmon.out
rm -f $data
@@ -40,11 +41,9 @@ exec 2>&1
actual=${program}.actual-l
expected=${program}.expected-l
-expected_dot=${program}.expected_dot-l
cleanup () {
rm -f "$actual"
rm -f "$expected"
- rm -f "$expected_dot"
}
trap cleanup 0
@@ -54,19 +53,28 @@ cat > "$expected" <<EOF
40 f3 1
EOF
-# Special version for powerpc with function descriptors.
-cat > "$expected_dot" <<EOF
+case "$target" in
+ *-*-solaris2*)
+ # Solaris with the BSD gmon.out format includes main in the call graph.
+ cat >> $expected <<EOF
+51 main 1
+EOF
+ ;;
+ powerpc-*-aix* | rs6000-*-aix*)
+ # Special version for powerpc with function descriptors.
+ cat > "$expected" <<EOF
25 .f1 2000
31 .f2 1000
40 .f3 1
EOF
+ ;;
+esac
"$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
+if diff -u --label expected "$expected" --label actual "$actual" ; then
echo "PASS"
else
echo "FAIL"
diff --git a/gprof/testsuite/tst-gmon-gprof-l2.sh b/gprof/testsuite/tst-gmon-gprof-l2.sh
index 530d022e472..d0f47a7e9bb 100755
--- a/gprof/testsuite/tst-gmon-gprof-l2.sh
+++ b/gprof/testsuite/tst-gmon-gprof-l2.sh
@@ -24,6 +24,7 @@ if test -z "$GPROF"; then
fi
program="$2"
+target="$3"
# Generate gmon.out
data=gmon.out
rm -f $data
@@ -40,11 +41,9 @@ exec 2>&1
actual=${program}.actual-l
expected=${program}.expected-l
-expected_dot=${program}.expected_dot-l
cleanup () {
rm -f "$actual"
rm -f "$expected"
- rm -f "$expected_dot"
}
trap cleanup 0
@@ -54,19 +53,28 @@ cat > "$expected" <<EOF
40 f3 1
EOF
-# Special version for powerpc with function descriptors.
-cat > "$expected_dot" <<EOF
+case "$target" in
+ *-*-solaris2*)
+ # Solaris with the BSD gmon.out format includes main in the call graph.
+ cat >> $expected <<EOF
+51 main 1
+EOF
+ ;;
+ powerpc-*-aix* | rs6000-*-aix*)
+ # Special version for powerpc with function descriptors.
+ cat > "$expected" <<EOF
25 .f1 2000
31 .f2 1000
40 .f3 1
EOF
+ ;;
+esac
"$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
+if diff -u --label expected "$expected" --label actual "$actual" ; then
echo "PASS"
else
echo "FAIL"
diff --git a/gprof/testsuite/tst-gmon-gprof.sh b/gprof/testsuite/tst-gmon-gprof.sh
index ef66d93a23a..f912768aa29 100755
--- a/gprof/testsuite/tst-gmon-gprof.sh
+++ b/gprof/testsuite/tst-gmon-gprof.sh
@@ -24,6 +24,7 @@ if test -z "$GPROF"; then
fi
program="$2"
+target="$3"
# Generate gmon.out
data=gmon.out
rm -f $data
@@ -40,11 +41,9 @@ 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
@@ -54,19 +53,28 @@ f2 1000
f3 1
EOF
-# Special version for powerpc with function descriptors.
-cat > "$expected_dot" <<EOF
+case "$target" in
+ *-*-solaris2*)
+ # Solaris with the BSD gmon.out format includes main in the call graph.
+ cat >> $expected <<EOF
+main 1
+EOF
+ ;;
+ powerpc-*-aix* | rs6000-*-aix*)
+ # Special version for powerpc with function descriptors.
+ cat > "$expected" <<EOF
.f1 2000
.f2 1000
.f3 1
EOF
+ ;;
+esac
"$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
+if diff -u --label expected "$expected" --label actual "$actual" ; then
echo "PASS"
else
echo "FAIL"
More information about the Binutils-cvs
mailing list