Index: gdb/testsuite/gdb.perf/solib.exp |
diff --git a/gdb/testsuite/gdb.perf/solib.exp b/gdb/testsuite/gdb.perf/solib.exp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c1b00b06546febb7d00e90639192568a80edddc4 |
--- /dev/null |
+++ b/gdb/testsuite/gdb.perf/solib.exp |
@@ -0,0 +1,87 @@ |
+# Copyright (C) 2013 Free Software Foundation, Inc. |
+ |
+# 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 of the License, 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, see <http://www.gnu.org/licenses/>. |
+ |
+# This test case is to test the performance of GDB when it is handling |
+# the shared libraries of inferior are loaded and unloaded. |
+# There are two parameters in this test: |
+# - SOLIB_COUNT is the number of shared libraries program will load |
+# and unload |
+# - SOLIB_DLCLOSE_REVERSED_ORDER controls the order of dlclose shared |
+# libraries. If it is set, program dlclose shared libraries in a |
+# reversed order of loading. |
+ |
+load_lib perftest.exp |
+ |
+if [skip_perf_tests] { |
+ return 0 |
+} |
+ |
+standard_testfile .c |
+set executable $testfile |
+set expfile $testfile.exp |
+ |
+# make check-perf RUNTESTFLAGS='solib.exp SOLIB_COUNT=1024' |
+if ![info exists SOLIB_COUNT] { |
+ set SOLIB_COUNT 128 |
+} |
+ |
+PerfTest::assemble { |
+ global SOLIB_COUNT |
+ global srcdir subdir srcfile binfile |
+ |
+ for {set i 0} {$i < $SOLIB_COUNT} {incr i} { |
+ |
+ # Produce source files. |
+ set libname "solib-lib$i" |
+ set src [standard_output_file $libname.c] |
+ set exe [standard_output_file $libname] |
+ |
+ gdb_produce_source $src "int shr$i (void) {return 0;}" |
+ |
+ # Compile. |
+ if { [gdb_compile_shlib $src $exe {debug}] != "" } { |
+ return -1 |
+ } |
+ |
+ # Delete object files to save some space. |
+ file delete [standard_output_file "solib-lib$i.c.o"] |
+ } |
+ |
+ set compile_flags {debug shlib_load} |
+ global SOLIB_DLCLOSE_REVERSED_ORDER |
+ |
+ if [info exists SOLIB_DLCLOSE_REVERSED_ORDER] { |
+ lappend compile_flags "additional_flags=-DSOLIB_DLCLOSE_REVERSED_ORDER" |
+ } |
+ |
+ if { [gdb_compile "$srcdir/$subdir/$srcfile" ${binfile} executable $compile_flags] != "" } { |
+ return -1 |
+ } |
+ |
+ return 0 |
+} { |
+ global binfile |
+ |
+ clean_restart $binfile |
+ |
+ if ![runto_main] { |
+ fail "Can't run to main" |
+ return -1 |
+ } |
+} { |
+ global SOLIB_COUNT |
+ |
+ gdb_test_no_output "python SolibLoadUnload\($SOLIB_COUNT\).run()" |
+} |