| # Copyright (C) 2013-2023 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 | 
 |  | 
 | require allow_perf_tests | 
 |  | 
 | 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] { | 
 | 	return -1 | 
 |     } | 
 |     return 0 | 
 | } { | 
 |     global SOLIB_COUNT | 
 |  | 
 |     gdb_test_python_run "SolibLoadUnload\($SOLIB_COUNT\)" | 
 |     return 0 | 
 | } |