# Copyright (C) 2015-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 . # Perftest description file for building the "gmonster2" benchmark. # Where does the name come from? The benchmark is derived from one of the # monster programs at Google. # # Perftest descriptions are loaded thrice: # 1) To generate the build .exp files # GDB_PERFTEST_MODE=gen-build-exps # This step allows for parallel builds of the majority of pieces of the # test binary and shlibs. # 2) To compile the "pieces" of the binary and shlibs. # "Pieces" are the bulk of the machine-generated sources of the test. # This step is driven by lib/build-piece.exp. # GDB_PERFTEST_MODE=build-pieces # 3) To perform the final link of the binary and shlibs. # GDB_PERFTEST_MODE=compile # # Example usage: # bash$ make -j5 build-perf RUNTESTFLAGS="gmonster1.exp gmonster2.exp" # bash$ make check-perf RUNTESTFLAGS="gdb.perf/gm*-*.exp GDB=/path/to/gdb" load_lib perftest.exp load_lib gen-perf-test.exp if [skip_perf_tests] { return 0 } if ![info exists MONSTER] { set MONSTER "n" } proc make_testcase_config { } { global MONSTER set program_name "gmonster2" array set testcase [GenPerfTest::init_testcase $program_name] set testcase(language) c++ # *_{sources,headers} need to be embedded in an outer list # because remember each element of the outer list is for each run, and # here we want to use the same value for all runs. set testcase(binary_extra_sources) { { gmonster2.cc gm-hello.cc gm-use-cerr.cc } } set testcase(binary_extra_headers) { { gm-utils.h gm-std.h } } set testcase(gen_shlib_extra_sources) { { gm-hello.cc gm-use-cerr.cc } } set testcase(gen_shlib_extra_headers) { { gm-utils.h gm-std.h } } set testcase(tail_shlib_sources) { { gm-std.cc } } set testcase(tail_shlib_headers) { { gm-std.h } } if { $MONSTER == "y" } { set testcase(run_names) { 10-sos 100-sos 1000-sos } set testcase(nr_gen_shlibs) { 10 100 1000 } } else { set testcase(run_names) { 1-so 10-sos 100-sos } set testcase(nr_gen_shlibs) { 1 10 100 } } set testcase(nr_compunits) 10 set testcase(nr_extern_globals) 10 set testcase(nr_static_globals) 10 set testcase(nr_extern_functions) 10 set testcase(nr_static_functions) 10 # class_specs needs to be embedded in an outer list because remember # each element of the outer list is for each run, and here we want to use # the same value for all runs. set testcase(class_specs) { { { count 1 name { class } nr_members 10 nr_static_members 10 nr_methods 10 nr_static_methods 10 nr_inline_methods 10 nr_static_inline_methods 10 } { count 1 name { ns0 class } nr_members 10 nr_static_members 10 nr_methods 10 nr_static_methods 10 nr_inline_methods 10 nr_static_inline_methods 10 } { count 1 name { ns0 anonymous aclass } nr_members 10 nr_static_members 10 nr_methods 10 nr_static_methods 10 nr_inline_methods 10 nr_static_inline_methods 10 } { count 1 name { ns0 ns1 class } nr_members 10 nr_static_members 10 nr_methods 10 nr_static_methods 10 nr_inline_methods 10 nr_static_inline_methods 10 } { count 1 name { ns0 anonymous ns1 aclass } nr_members 10 nr_static_members 10 nr_methods 10 nr_static_methods 10 nr_inline_methods 10 nr_static_inline_methods 10 } } } return [array get testcase] } GenPerfTest::standard_compile_driver gmonster2.exp make_testcase_config