public inbox for binutils-cvs@sourceware.org
 help / color / mirror / Atom feed
* [binutils-gdb] gprofng: 29470 The test suite should be made more flexible
@ 2023-05-31 18:51 Vladimir Mezentsev
  0 siblings, 0 replies; only message in thread
From: Vladimir Mezentsev @ 2023-05-31 18:51 UTC (permalink / raw)
  To: bfd-cvs, gdb-cvs

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=defb734195d055bbb80be04b6067a9bb80ff249d

commit defb734195d055bbb80be04b6067a9bb80ff249d
Author: Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
Date:   Thu May 25 17:54:53 2023 -0700

    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  <vladimir.mezentsev@oracle.com>
    
            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.

Diff:
---
 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 ++-
 .../testsuite/gprofng.display/jsynprog/Makefile    |   2 +-
 .../gprofng.display/jsynprog/Routine.java          |  24 ++-
 .../gprofng.display/jsynprog/Sub_Routine.java      |  25 +++-
 .../testsuite/gprofng.display/jsynprog/cloop.cc    |  23 ++-
 .../testsuite/gprofng.display/jsynprog/jsynprog.h  |  22 ++-
 .../gprofng.display/jsynprog/jsynprog.java         | 161 ++++++++++++++-------
 .../gprofng.display/synprog/check_results.pl       |  12 +-
 .../testsuite/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 <jni.h>
 #include <stdio.h>
 #include <stdlib.h>
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 <jni.h>
 /* 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("<Truncated-stack>", true);
+	if (commands.indexOf("recursedeep") >= 0) {
+	    recTime(); 
+	    rtn.recursedeep(0,500, scale);
+	    printValue("<Truncated-stack>", 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"]

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2023-05-31 18:51 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-05-31 18:51 [binutils-gdb] gprofng: 29470 The test suite should be made more flexible Vladimir Mezentsev

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).