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