From defb734195d055bbb80be04b6067a9bb80ff249d Mon Sep 17 00:00:00 2001 From: Vladimir Mezentsev Date: Thu, 25 May 2023 17:54:53 -0700 Subject: [PATCH] gprofng: 29470 The test suite should be made more flexible I add two new targets (check-extra, check-install) for gprofng testing: `make check` runs sanity testing for gprofng and takes ~30 secunds. `make check-extra` runs all gprofng tests and takes ~20 minutus. `make check-install` runs all gprofng tests and uses gprofng installation. On aarch64, there are unwind problems in libgp-collector.so. I set ACCT_FILTER to temporarily ignore problematic functions. gprofng/ChangeLog 2023-05-25 Vladimir Mezentsev PR gprofng/29470 * Makefile.am: Add check-extra, check-install. * Makefile.in: Rebuild * testsuite/config/default.exp: Set the GPROFNG variable. * testsuite/gprofng.display/display.exp: Updated the test list. * testsuite/gprofng.display/jsynprog/Intface.java: Correct copyright. * testsuite/gprofng.display/jsynprog/Launcher.java: Likewise. * testsuite/gprofng.display/jsynprog/Makefile: Likewise. * testsuite/gprofng.display/jsynprog/Routine.java: Likewise. * testsuite/gprofng.display/jsynprog/Sub_Routine.java: Likewise. * testsuite/gprofng.display/jsynprog/cloop.cc: Likewise. * testsuite/gprofng.display/jsynprog/jsynprog.h: Likewise. * testsuite/gprofng.display/jsynprog/jsynprog.java: Correct copyright. Add the -j option to run the selected functions. * testsuite/gprofng.display/synprog/check_results.pl: Remove unused environment variable. * testsuite/gprofng.display/synprog/synprog.c: Updated DEFAULT_COMMAND. * testsuite/lib/Makefile.skel: Apply $(ACCT_FILTER). * testsuite/lib/acct.pm: Ignore errors when $(ACCT_FILTER) is set. * testsuite/lib/display-lib.exp: Add TARGET_FLAGS in make_args. --- gprofng/Makefile.am | 9 +- gprofng/Makefile.in | 9 +- gprofng/testsuite/config/default.exp | 6 + gprofng/testsuite/gprofng.display/display.exp | 58 ++++--- .../gprofng.display/jsynprog/Intface.java | 21 ++- .../gprofng.display/jsynprog/Launcher.java | 21 ++- .../gprofng.display/jsynprog/Makefile | 2 +- .../gprofng.display/jsynprog/Routine.java | 24 ++- .../gprofng.display/jsynprog/Sub_Routine.java | 25 ++- .../gprofng.display/jsynprog/cloop.cc | 23 ++- .../gprofng.display/jsynprog/jsynprog.h | 22 ++- .../gprofng.display/jsynprog/jsynprog.java | 161 ++++++++++++------ .../gprofng.display/synprog/check_results.pl | 12 +- .../gprofng.display/synprog/synprog.c | 2 +- gprofng/testsuite/lib/Makefile.skel | 3 +- gprofng/testsuite/lib/acct.pm | 27 ++- gprofng/testsuite/lib/display-lib.exp | 5 +- 17 files changed, 311 insertions(+), 119 deletions(-) diff --git a/gprofng/Makefile.am b/gprofng/Makefile.am index 9658efd348c..b0c960a0ae0 100644 --- a/gprofng/Makefile.am +++ b/gprofng/Makefile.am @@ -52,9 +52,12 @@ AM_MAKEFLAGS = \ GPROFNG_CPPFLAGS="$(GPROFNG_CPPFLAGS)" if TCL_TRY -check-DEJAGNU: site.exp development.exp +.PHONY: check-small check-extra check-install + +check-DEJAGNU: check-small + +check-small check-extra check-install: site.exp development.exp srcroot=`cd $(srcdir) && pwd`; export srcroot; \ - r=`pwd`; export r; \ LC_ALL=C; export LC_ALL; \ EXPECT=$(EXPECT); export EXPECT; \ jdk_inc="$(jdk_inc)"; export jdk_inc; \ @@ -62,6 +65,8 @@ check-DEJAGNU: site.exp development.exp if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \ $$runtest --tool $(DEJATOOL) --srcdir $${srcroot}/testsuite \ JDK_INC="$(jdk_inc)" \ + CHECK_TARGET=$@ \ + PREFIX="$(prefix)" \ GPROFNG_BROKEN_JAVAC="$(GPROFNG_BROKEN_JAVAC)" \ MAKE="$(MAKE)" CC="$(CC)" CFLAGS="$(CFLAGS) $(PTHREAD_CFLAGS)" \ LDFLAGS="$(LDFLAGS)" LIBS="$(PTHREAD_LIBS) $(LIBS)" \ diff --git a/gprofng/Makefile.in b/gprofng/Makefile.in index a2854950e34..582e0bb8716 100644 --- a/gprofng/Makefile.in +++ b/gprofng/Makefile.in @@ -929,9 +929,12 @@ uninstall-am: .PRECIOUS: Makefile -@TCL_TRY_TRUE@check-DEJAGNU: site.exp development.exp +@TCL_TRY_TRUE@.PHONY: check-small check-extra check-install + +@TCL_TRY_TRUE@check-DEJAGNU: check-small + +@TCL_TRY_TRUE@check-small check-extra check-install: site.exp development.exp @TCL_TRY_TRUE@ srcroot=`cd $(srcdir) && pwd`; export srcroot; \ -@TCL_TRY_TRUE@ r=`pwd`; export r; \ @TCL_TRY_TRUE@ LC_ALL=C; export LC_ALL; \ @TCL_TRY_TRUE@ EXPECT=$(EXPECT); export EXPECT; \ @TCL_TRY_TRUE@ jdk_inc="$(jdk_inc)"; export jdk_inc; \ @@ -939,6 +942,8 @@ uninstall-am: @TCL_TRY_TRUE@ if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \ @TCL_TRY_TRUE@ $$runtest --tool $(DEJATOOL) --srcdir $${srcroot}/testsuite \ @TCL_TRY_TRUE@ JDK_INC="$(jdk_inc)" \ +@TCL_TRY_TRUE@ CHECK_TARGET=$@ \ +@TCL_TRY_TRUE@ PREFIX="$(prefix)" \ @TCL_TRY_TRUE@ GPROFNG_BROKEN_JAVAC="$(GPROFNG_BROKEN_JAVAC)" \ @TCL_TRY_TRUE@ MAKE="$(MAKE)" CC="$(CC)" CFLAGS="$(CFLAGS) $(PTHREAD_CFLAGS)" \ @TCL_TRY_TRUE@ LDFLAGS="$(LDFLAGS)" LIBS="$(PTHREAD_LIBS) $(LIBS)" \ diff --git a/gprofng/testsuite/config/default.exp b/gprofng/testsuite/config/default.exp index ca2997b1742..f76047e2a34 100644 --- a/gprofng/testsuite/config/default.exp +++ b/gprofng/testsuite/config/default.exp @@ -32,6 +32,12 @@ if {![info exists CFLAGS]} { set CFLAGS "-g -O2" } +if { "$CHECK_TARGET" == "check-install" } { + set ::env(GPROFNG) "$PREFIX/bin/gprofng" +} else { + set ::env(GPROFNG) "$BUILDDIR/src/gprofng" +} + # Create directories where gprofng can find libraries and binaries: remote_exec host "sh -c \"rm -rf tmpdir; mkdir -p tmpdir\"" remote_exec host "sh -c \"mkdir -p lib; rm -f lib/gprofng; ln -s ../libcollector/.libs lib/gprofng\"" diff --git a/gprofng/testsuite/gprofng.display/display.exp b/gprofng/testsuite/gprofng.display/display.exp index c34ba3abd54..4698795288f 100644 --- a/gprofng/testsuite/gprofng.display/display.exp +++ b/gprofng/testsuite/gprofng.display/display.exp @@ -31,34 +31,37 @@ if { ![istarget $pltf-*-*] return } -switch $pltf { - x86_64 { - # Columns in the table represent: - # dir cflags gprofflags Others - set table { - {"jsynprog" "-g -Wall" "-p on -j on"} - {"mttest" "-g -O0" "-p on"} - {"mttest" "-g -O0" "-p on -h on"} - {"synprog" "-g -O0" "-p on"} - {"synprog" "-g -O0" "-p on -h on"} - } - } - aarch64 { +if { "$pltf" == "aarch64" } { +# Use a filter for not leaf functions due to the unwind problem in libgp-collector.so + set ::env(ACCT_FILTER) [join { "|egrep -vw 'gpf|tailcallopt|" + "cache_trash|calladd|computeF|cond_global|cond_timeout_global|" + "lock_global|lock_local|lock_none|nothreads|sema_global|trylock_global'" + } "" ] +} +if { "$CHECK_TARGET" == "check-extra" || "$CHECK_TARGET" == "check-install" } { +# dir cflags gprofflags tflags set table { - {"jsynprog" "-g -Wall" "-p on -j on"} - {"mttest" "-g -O0" "-p on"} - {"synprog" "-g -O0" "-p on"} + {"mttest" "-g -O0" "-p on"} + {"mttest" "-g -O0" "-p on -h on"} + {"mttest" "-g -O" "-p on -a on"} + {"mttest" "-g -O" "-p on -a off"} + {"mttest" "-g -O" "-p on -h on"} + {"jsynprog" "-g -Wall" "-p on -a on"} + {"jsynprog" "-g -Wall" "-p on -a off"} + {"jsynprog" "-g -Wall" "-p on -j on"} + {"synprog" "-g -O0" "-p on"} + {"synprog" "-g -O0" "-p on -h on"} + {"synprog" "-g -O" "-p on -a on"} + {"synprog" "-g -O" "-p on -a off"} + {"synprog" "-g -O" "-p on -h on"} } - } - default { - # Columns in the table represent: - # dir cflags gprofflags Others +} else { # "$CHECK_TARGET" is "check" or "check-DEJAGNU" +# dir cflags gprofflags tflags set table { - {"jsynprog" "" ""} - {"mttest" "" ""} - {"synprog" "" ""} + {"jsynprog" "-g -Wall" "-p on -j on" "-j add_int"} + {"mttest" "-g -O0" "-p on" "-j calladd"} + {"synprog" "-g -O0" "-p on" "cpu"} } - } } global JDK_INC @@ -68,6 +71,11 @@ foreach line $table { set dir [lindex $line 0] set cflags [lindex $line 1] set gprofflags [lindex $line 2] + if { [llength $line] > 3 } { + set tflags [lindex $line 3] + } else { + set tflags " " + } verbose [file rootname $line] verbose running display test $line @@ -75,7 +83,7 @@ foreach line $table { && ($JDK_INC == "" || $GPROFNG_BROKEN_JAVAC == "yes") } { unsupported $dir } else { - run_display_test $dir $cflags $gprofflags + run_display_test $dir $cflags $gprofflags $tflags } } diff --git a/gprofng/testsuite/gprofng.display/jsynprog/Intface.java b/gprofng/testsuite/gprofng.display/jsynprog/Intface.java index 016e7b28ba6..4a1edb18c4a 100644 --- a/gprofng/testsuite/gprofng.display/jsynprog/Intface.java +++ b/gprofng/testsuite/gprofng.display/jsynprog/Intface.java @@ -1,4 +1,23 @@ -// Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved. +/* Copyright (C) 2021-2023 Free Software Foundation, Inc. + Contributed by Oracle. + + This file is part of GNU Binutils. + + 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 + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, 51 Franklin Street - Fifth Floor, Boston, + MA 02110-1301, USA. */ + public interface Intface { public int add_int (int scale); diff --git a/gprofng/testsuite/gprofng.display/jsynprog/Launcher.java b/gprofng/testsuite/gprofng.display/jsynprog/Launcher.java index 33ee06cd8db..37669dc41c6 100644 --- a/gprofng/testsuite/gprofng.display/jsynprog/Launcher.java +++ b/gprofng/testsuite/gprofng.display/jsynprog/Launcher.java @@ -1,5 +1,22 @@ -// Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved. -// @(#)Launcher.java 1.3 10/03/24 SMI +/* Copyright (C) 2021-2023 Free Software Foundation, Inc. + Contributed by Oracle. + + This file is part of GNU Binutils. + + 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 + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, 51 Franklin Street - Fifth Floor, Boston, + MA 02110-1301, USA. */ import java.lang.reflect.*; diff --git a/gprofng/testsuite/gprofng.display/jsynprog/Makefile b/gprofng/testsuite/gprofng.display/jsynprog/Makefile index 3d9222dc9ec..37ea9edbb92 100644 --- a/gprofng/testsuite/gprofng.display/jsynprog/Makefile +++ b/gprofng/testsuite/gprofng.display/jsynprog/Makefile @@ -52,5 +52,5 @@ jsynprog.class: $(JAVA_SRCS) $(EXPERIMENT): $(TARGETS) @echo " ---- Build: $@ -----" rm -rf $@ - $(COLLECT) $(COLLECT_FLAGS) -o $@ $(JAVA) $(JAVACFLAGS) jsynprog + $(COLLECT) $(COLLECT_FLAGS) -o $@ $(JAVA) $(JAVACFLAGS) jsynprog $(TARGET_FLAGS) diff --git a/gprofng/testsuite/gprofng.display/jsynprog/Routine.java b/gprofng/testsuite/gprofng.display/jsynprog/Routine.java index cfe45d2b93d..1295d82f12a 100644 --- a/gprofng/testsuite/gprofng.display/jsynprog/Routine.java +++ b/gprofng/testsuite/gprofng.display/jsynprog/Routine.java @@ -1,8 +1,22 @@ -/** - * Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved. - * This class implements the Intface interface - * increments value of integer and floats - */ +/* Copyright (C) 2021-2023 Free Software Foundation, Inc. + Contributed by Oracle. + + This file is part of GNU Binutils. + + 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 + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, 51 Franklin Street - Fifth Floor, Boston, + MA 02110-1301, USA. */ import java.util.*; diff --git a/gprofng/testsuite/gprofng.display/jsynprog/Sub_Routine.java b/gprofng/testsuite/gprofng.display/jsynprog/Sub_Routine.java index 11e045edc11..57afd272314 100644 --- a/gprofng/testsuite/gprofng.display/jsynprog/Sub_Routine.java +++ b/gprofng/testsuite/gprofng.display/jsynprog/Sub_Routine.java @@ -1,7 +1,24 @@ -/* Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved. -** @(#)Sub_Routine.java 1.4 10/03/24 SMI -** This is subclass of Routine , overrides one method -*/ +/* Copyright (C) 2021-2023 Free Software Foundation, Inc. + Contributed by Oracle. + + This file is part of GNU Binutils. + + 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 + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, 51 Franklin Street - Fifth Floor, Boston, + MA 02110-1301, USA. */ + +// This is subclass of Routine, overrides one method public class Sub_Routine extends Routine { private static native double cTimer(); diff --git a/gprofng/testsuite/gprofng.display/jsynprog/cloop.cc b/gprofng/testsuite/gprofng.display/jsynprog/cloop.cc index cf8b779916b..d9a78e23f9a 100644 --- a/gprofng/testsuite/gprofng.display/jsynprog/cloop.cc +++ b/gprofng/testsuite/gprofng.display/jsynprog/cloop.cc @@ -1,6 +1,23 @@ -/* - * Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved. - */ +/* Copyright (C) 2021-2023 Free Software Foundation, Inc. + Contributed by Oracle. + + This file is part of GNU Binutils. + + 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 + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, 51 Franklin Street - Fifth Floor, Boston, + MA 02110-1301, USA. */ + #include #include #include diff --git a/gprofng/testsuite/gprofng.display/jsynprog/jsynprog.h b/gprofng/testsuite/gprofng.display/jsynprog/jsynprog.h index 34b4f6cf0a7..97a24b33f33 100644 --- a/gprofng/testsuite/gprofng.display/jsynprog/jsynprog.h +++ b/gprofng/testsuite/gprofng.display/jsynprog/jsynprog.h @@ -1,5 +1,23 @@ -/* DO NOT EDIT THIS FILE - it is machine generated */ -/* Copyright (c) 2006, 2011, Oracle and/or its affiliates. All Rights Reserved. */ +/* Copyright (C) 2021-2023 Free Software Foundation, Inc. + Contributed by Oracle. + + This file is part of GNU Binutils. + + 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 + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, 51 Franklin Street - Fifth Floor, Boston, + MA 02110-1301, USA. */ + #include /* Header for class jsynprog */ diff --git a/gprofng/testsuite/gprofng.display/jsynprog/jsynprog.java b/gprofng/testsuite/gprofng.display/jsynprog/jsynprog.java index eb98b5ea7fd..ee22bb971cb 100644 --- a/gprofng/testsuite/gprofng.display/jsynprog/jsynprog.java +++ b/gprofng/testsuite/gprofng.display/jsynprog/jsynprog.java @@ -1,5 +1,22 @@ -// Copyright (c) 2006, 2013, Oracle and/or its affiliates. All rights reserved. -// @(#)jsynprog.java SMI +/* Copyright (C) 2021-2023 Free Software Foundation, Inc. + Contributed by Oracle. + + This file is part of GNU Binutils. + + 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 + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, 51 Franklin Street - Fifth Floor, Boston, + MA 02110-1301, USA. */ import java.util.*; import java.io.*; @@ -27,17 +44,22 @@ class jsynprog jsynprog jsyn_obj = new jsynprog(); Integer ni; int scale = 1000; + String commands = "memalloc.add_int.add_double.has_inner_class" + + ".recurse.recursedeep.bounce.array_op.vector_op.sys_op" + + ".jni_JavaJavaC.JavaCC.JavaCJava.Launcher"; createAcct(); LoadJNILibrary(args); testtime = computeSet(); /* check for invocation parameter */ - if (args.length != 0) { - if (args[0].equals("fast")) { + for (int i = 0; i < args.length; i++) { + if (args[i].equals("-fast")) { scale = 10000; - } else if (args[0].equals("slow")) { + } else if (args[i].equals("-slow")) { scale = 1; + } else if (args[i].equals("-j") && i + 1 < args.length) { + commands = args[++i]; } else { System.err.println("fatal: unexpected argument: " + args[0] ); System.exit(1); @@ -47,84 +69,115 @@ class jsynprog /* large memory allocations, trigger gc */ Routine rtn = new Routine(); Sub_Routine sbrt = new Sub_Routine(); - recTime(); - rtn.memalloc(10000, scale); - printValue("Routine.memalloc", false); + + if (commands.indexOf("memalloc") >= 0) { + recTime(); + rtn.memalloc(10000, scale); + printValue("Routine.memalloc", false); + } /* add integers */ - recTime(); - ni = new Integer (rtn.add_int(scale)); - printValue("Routine.add_int", true); + if (commands.indexOf("add_int") >= 0) { + recTime(); + ni = new Integer (rtn.add_int(scale)); + printValue("Routine.add_int", true); + } /* add double */ - recTime(); - Double nd = new Double(rtn.add_double(scale)); - printValue("Routine.add_double", true); + if (commands.indexOf("add_double") >= 0) { + recTime(); + Double nd = new Double(rtn.add_double(scale)); + printValue("Routine.add_double", true); + } /* call method in derived class */ - recTime(); - ni = new Integer (sbrt.add_int(scale)); - printValue("Sub_Routine.add_int", true); + if (commands.indexOf("add_int") >= 0) { + recTime(); + ni = new Integer (sbrt.add_int(scale)); + printValue("Sub_Routine.add_int", true); + } /* call method that defines an inner class */ - recTime(); - Integer[] na = rtn.has_inner_class(scale); - printValue("Routine.has_inner_class", true); + if (commands.indexOf("has_inner_class") >= 0) { + recTime(); + Integer[] na = rtn.has_inner_class(scale); + printValue("Routine.has_inner_class", true); + } /* recursion */ - recTime(); - rtn.recurse(0,80, scale); - printValue("Routine.recurse", true); + if (commands.indexOf("recurse") >= 0) { + recTime(); + rtn.recurse(0,80, scale); + printValue("Routine.recurse", true); + } /* deep recursion */ - recTime(); - rtn.recursedeep(0,500, scale); - printValue("", true); + if (commands.indexOf("recursedeep") >= 0) { + recTime(); + rtn.recursedeep(0,500, scale); + printValue("", true); + } /* indirect recursion */ - recTime(); - rtn.bounce(0,20, scale); - printValue("Routine.bounce", true); + if (commands.indexOf("bounce") >= 0) { + recTime(); + rtn.bounce(0,20, scale); + printValue("Routine.bounce", true); + } /* array operations */ - recTime(); - rtn.array_op(scale); - printValue("Routine.array_op", false); + if (commands.indexOf("array_op") >= 0) { + recTime(); + rtn.array_op(scale); + printValue("Routine.array_op", false); + } /* Vector operations */ - recTime(); - rtn.vector_op(scale); - printValue("Routine.vector_op", false); + if (commands.indexOf("vector_op") >= 0) { + recTime(); + rtn.vector_op(scale); + printValue("Routine.vector_op", false); + } /* spend time in system calls */ - recTime(); - rtn.sys_op(scale); - printValue("Routine.sys_op", false); + if (commands.indexOf("sys_op") >= 0) { + recTime(); + rtn.sys_op(scale); + printValue("Routine.sys_op", false); + } /* java->java->c */ - recTime(); - int np = 0; - jni_JavaJavaC(np, scale); - printValue("jsynprog.jni_JavaJavaC", true); + if (commands.indexOf("jni_JavaJavaC") >= 0) { + recTime(); + int np = 0; + jni_JavaJavaC(np, scale); + printValue("jsynprog.jni_JavaJavaC", true); + } /* java->c->c */ - recTime(); - JavaCC(scale); - printValue("jsynprog.JavaCC", true); + if (commands.indexOf("JavaCC") >= 0) { + recTime(); + JavaCC(scale); + printValue("jsynprog.JavaCC", true); + } /* java->c->java */ - recTime(); - JavaCJava(scale); - printValue("jsynprog.JavaCJava", true); + if (commands.indexOf("JavaCJava") >= 0) { + recTime(); + JavaCJava(scale); + printValue("jsynprog.JavaCJava", true); + } /* dynamically loaded classes */ - String java_ver = System.getProperty("java.version"); - Launcher lnch = new Launcher(); - String[] params = new String[]{"DynLoadedClass"}; - recTime(); - lnch.main(params); - printValue("Launcher.main", true); + if (commands.indexOf("Launcher") >= 0) { + String java_ver = System.getProperty("java.version"); + Launcher lnch = new Launcher(); + String[] params = new String[]{"DynLoadedClass"}; + recTime(); + lnch.main(params); + printValue("Launcher.main", true); + } System.gc(); } diff --git a/gprofng/testsuite/gprofng.display/synprog/check_results.pl b/gprofng/testsuite/gprofng.display/synprog/check_results.pl index ec278be9a02..830ed9a00fc 100755 --- a/gprofng/testsuite/gprofng.display/synprog/check_results.pl +++ b/gprofng/testsuite/gprofng.display/synprog/check_results.pl @@ -25,16 +25,8 @@ if 0; use strict; require "acct.pm"; -my(@checkTime); - -if ("$ENV{DA_io}" eq "on") { - @checkTime = (); - acct::readAcct("synprog.acct2", @checkTime); -} else { - @checkTime = (1, 2); - acct::readAcct("synprog.acct", @checkTime); -} - +my(@checkTime) = (1, 2); # columns 1 and 2 - time in seconds. +acct::readAcct($ARGV[0], @checkTime); acct::read_er_print_out($ARGV[1], -1); acct::createDiff(); exit acct::set_retVal(0); diff --git a/gprofng/testsuite/gprofng.display/synprog/synprog.c b/gprofng/testsuite/gprofng.display/synprog/synprog.c index ac5950a0d4b..3e0eac2f67f 100644 --- a/gprofng/testsuite/gprofng.display/synprog/synprog.c +++ b/gprofng/testsuite/gprofng.display/synprog/synprog.c @@ -149,7 +149,7 @@ static int CLONE_FLAGS[] = { /* the default script */ static char DEFAULT_COMMAND[] = "icpu.md.cpu.rec.recd.dousl.gpf.fitos.ec.tco.b.nap.uf." - "sys.sig.so.sx.so.sched.uwdc"; + "sys.sig.so.sx.so.sched"; struct scripttab scripttab[] = { {"abt", doabort, "doabort", 0, 0}, diff --git a/gprofng/testsuite/lib/Makefile.skel b/gprofng/testsuite/lib/Makefile.skel index ebb76a89d7a..5a30966c1cd 100644 --- a/gprofng/testsuite/lib/Makefile.skel +++ b/gprofng/testsuite/lib/Makefile.skel @@ -56,7 +56,8 @@ $(DISPLAY_LOG): $(EXPERIMENT) $(DISPLAY) $(DISPLAY_FLAGS) $(EXPERIMENT) > $@ compare: $(DISPLAY_LOG) - perl -I $(srcdir)/../../lib $(srcdir)/check_results.pl $(ACCT_FILE) $(DISPLAY_LOG) + cat $(ACCT_FILE) $(ACCT_FILTER) > $(ACCT_FILE).fltr + perl -I $(srcdir)/../../lib $(srcdir)/check_results.pl $(ACCT_FILE).fltr $(DISPLAY_LOG) clobber clean: rm -rf *.er diff --git a/gprofng/testsuite/lib/acct.pm b/gprofng/testsuite/lib/acct.pm index 7d754aeeaae..7c328e7fc2f 100644 --- a/gprofng/testsuite/lib/acct.pm +++ b/gprofng/testsuite/lib/acct.pm @@ -97,7 +97,21 @@ sub set_retVal if ( $retVal == 0 ) { $retVal = $_[0]; if ($retVal != 0 ) { - warn sprintf("DEBUG: retVal=%d\n", $retVal); + my $s = ""; + if ($retVal == $ERROR_DIFF_RANGE) { + $s = "Difference out of range"; + } elsif ($retVal == $ERROR_HIGH_UNKNOWN) { + $s = "High unknown detected"; + } elsif ($retVal == $ERROR_ACCT_MISMATCH) { + $s = "Accounting file mismatch"; + } elsif ($retVal == $ERROR_CALLER_VERIF) { + $s = "Caller/caller verification failed"; + } elsif ($retVal == $ERROR_ZERO_METRIC) { + $s = "Unexpected zero metric"; + } elsif ($retVal == $ERROR_NEGATIVE_TIME) { + $s = "Negative CPU time"; + } + warn sprintf("DEBUG: retVal=%d %s\n", $retVal, $s); } } return $retVal; @@ -450,7 +464,9 @@ sub doComp if ( $r2 > 0 ) { $err_diff_range = $ERROR_DIFF_RANGE; } else { - $err_zero_metric = $ERROR_ZERO_METRIC; + if (! exists $ENV{ACCT_FILTER}) { + $err_zero_metric = $ERROR_ZERO_METRIC; + } } } else { $err_acct_mismatch = $ERROR_ACCT_MISMATCH; @@ -544,7 +560,9 @@ sub doComp2AVG if ( $r2 > 0 ) { $err_diff_range = $ERROR_DIFF_RANGE; } else { - $err_zero_metric = $ERROR_ZERO_METRIC; + if (! exists $ENV{ACCT_FILTER}) { + $err_zero_metric = $ERROR_ZERO_METRIC; + } } } else { $err_acct_mismatch = $ERROR_ACCT_MISMATCH; @@ -592,7 +610,8 @@ sub checkUnknown() $val = sprintf($R->{FMT}, $val); $rate = sprintf($R->{FMT},($val / $total) * 100); - if (($val > $R->{'P_RANGE'}) && ($rate > $R->{'P_RATE'})) { + if ((! exists $ENV{ACCT_FILTER}) && + ($val > $R->{'P_RANGE'}) && ($rate > $R->{'P_RATE'})) { &set_retVal($ERROR_HIGH_UNKNOWN); &openFsingleScr(); $fmt = "#%-8s %10s %10s %s\n"; diff --git a/gprofng/testsuite/lib/display-lib.exp b/gprofng/testsuite/lib/display-lib.exp index d094279d6e6..0ad81b09bf0 100644 --- a/gprofng/testsuite/lib/display-lib.exp +++ b/gprofng/testsuite/lib/display-lib.exp @@ -50,7 +50,7 @@ proc run_native_host_cmd { command } { # display options, collect flags, app options? Do we want these to be # set on a per-app basis? (If so, they should probably be driven by a # file in the test dir.) -proc run_display_test { dir cflags gprofflags } { +proc run_display_test { dir cflags gprofflags tflags } { global srcdir MAKE CC CFLAGS LDFLAGS LIBS BUILDDIR set stripped [string map {" " ""} $dir] set testdir [string map {" " ""} "$dir.$cflags,$gprofflags"] @@ -58,7 +58,7 @@ proc run_display_test { dir cflags gprofflags } { set tdir "tmpdir/$testdir" send_log "create dir: $tdir\n" set output [run_native_host_cmd "mkdir -p $tdir"] - set gprofng $BUILDDIR/src/gprofng + set gprofng $::env(GPROFNG) set fd [open "$tdir/rules.txt" "w"] switch -regexp -- $testdir { @@ -80,6 +80,7 @@ proc run_display_test { dir cflags gprofflags } { set make_args "-f $sdir/Makefile srcdir=\"$sdir\" builddir=\"$BUILDDIR\" \ VPATH=\"$dir\" CC=\"$CC\" CFLAGS=\"$cflags\" LDFLAGS=\"$LDFLAGS\" \ + TARGET_FLAGS=\"$tflags\" \ DISPLAY_FLAGS=\"$DISPLAY_FLAGS\" \ COLLECT_FLAGS=\"$gprofflags\" GPROFNG=\"$gprofng\" MAKE=\"$MAKE\"" set output [run_native_host_cmd "cd $tdir && $MAKE $make_args all"] -- 2.30.2